Як запустити vi на контейнері docker?


101

Я встановив докер на моїй віртуальній машині. А тепер хочу створити файл за допомогою vi.

Але це показує мені помилку:

bash: vi: command not found

1
vi не може бути встановлений всередині контейнера. Який контейнер ви встановили та запустили?
Hüseyin BABAL

1
Ви повинні бути більш конкретними. Ви намагаєтесь запустити vi всередині контейнера, якщо так, то на якому зображенні базується контейнер? Швидше за все, у вас не встановлено vi. (apt-get install vim)
wpp

Це залежить від того, з чого imageви будуєте. Швидше за все, imageви використовуєте настільки легше, що в ньому є лише те, що потрібно для запуску як зображення. Вам потрібно вручну встановити необхідні пакунки.
ілюзіоніст

3
Ймовірно, вам не слід робити конфігурацію всередині контейнера. Зробіть це натомість у Dockerfile.
Адріан Муат,

Відповіді:


139

увійдіть в контейнер за допомогою наступної команди:

docker exec -it <container> bash

Потім запустіть таку команду.

apt-get update
apt-get install vim

11
Якщо під час запуску apt-get ви зіткнетеся з проблемою відмови у дозволі, вам потрібно запустити docker exec як root. "docker exec -u root -it <container> bash". Тоді apt-get повинен запрацювати.
java25,

Дякую @arunprakashpj. Єдина команда, яка працювала для зображення, завантаженого зі сховища AWS.
realPK

36

Ваш контейнер, ймовірно, не встановив його з коробки.

Запустіть apt-get install vimтермінал, і ви повинні бути готові до роботи.


2
Так, але я віддаю перевагу vim-tiny(Ubuntu)
Бен Уейлі,

2
Перш ніж запустити 'apt-get install vim', вам потрібно запустити 'apt-get update'.
user1521213

2
Спочатку apt-get updateTHENapt-get install vim
Yogi Ghorecha

30

Команда для запуску залежить від того, яке базове зображення ви використовуєте.

Для Alpine viвстановлюється як частина базової ОС. Встановлення vimбуде:

apk -U add vim

Для Debian та Ubuntu:

apt-get update && apt-get install -y vim

Для CentOS, viяк правило, встановлюється з базовою ОС. Для vim:

yum install -y vim

Це слід робити лише на початку розвитку. Отримавши робочий контейнер, зміни у файлах слід внести у ваше зображення або конфігурації, що зберігаються поза вашим контейнером. Оновіть файл Docker та інші файли, які він використовує для створення нового образу. Цього, безумовно, не слід робити на виробництві, оскільки зміни всередині контейнера є дизайнерськими і будуть втрачені при заміні контейнера.


1
ПОМИЛКА: Не вдається заблокувати базу даних: Дозвіл відмовлено
garg10may

1
Команди @ garg10may потрібно запускати як root. USER rootвсередині Dockerfile робить це, але обов’язково поверніться до іншого користувача. Я біжучий контейнер:docker exec -u root ...
BMitch

19

ВИКОРИСТОВУЙ ЦЕ:

apt-get update && apt-get install -y vim

Пояснення наведеної команди

  1. apt-get update => Оновить поточний пакет
  2. apt-get install => Встановить пакет
  3. -y => Передасть дозвіл, за замовчуванням буде встановлено значення Так.
  4. vim => Назва пакету, який ви хочете встановити.

12

Додайте наступний рядок у свій файл Docker, а потім відновіть образ докера.

RUN apt-get update && apt-get install -y vim

8

Також можна зменшити зображення докера, не встановлюючи зайвих редакторів. Ви можете редагувати файли через ssh з хоста докера в контейнер:

vim scp://remoteuser@container-ip//path/to/document

3
Чи не спрацює це лише в тому випадку, якщо на контейнері запущено ssh ? Спочатку я думав, що це геніальна ідея, але, здається, не можу змусити її спрацювати.
Кевін

7

Використовуйте команду нижче в контейнері на основі Debian:

apt-get install vim-tiny

Повна інструкція щодо використання в Dockerfile:

RUN apt-get update && apt-get install --no-install-recommends -y \   
 vim-tiny \  
 && apt-get clean && rm -rf /var/lib/apt/lists/*

Він не встановлює непотрібні пакети та видаляє непотрібні завантажені файли, тому розмір вашого зображення докера різко не збільшиться.


3

Для встановлення в контейнері Docker ви можете запустити команду

docker exec apt-get update && apt-get install -y vim

Але це буде обмежено контейнером, в якому встановлено vim. Щоб зробити його доступним для всіх контейнерів, відредагуйте файл Docker і додайте

ЗАПУСТИТИ apt-get update && apt-get install -y vim

або ви також можете розширити зображення в новому файлі Docker і додати вищезазначену команду. Напр.

ВІД <назва зображення>

ЗАПУСТИТИ apt-get update && apt-get install -y vim


1

Усередині контейнера (у докері, а не у віртуальній машині) за замовчуванням вони не встановлені. Навіть apt-get , wget не буде працювати. Моя віртуальна машина працює на Ubuntu 17.10. Для мене ні пакета manaager працював.

Yum не є частиною debian або ubuntu. Це частина червоного капелюха. Але це працює в Ubuntu і за замовчуванням встановлюється як apt-get

Щоб встановити vim, використовуйте цю команду

yum install -y vim-enhanced 

Щоб видалити vim:

yum uninstall -y vim-enhanced 

Так само,

yum install -y wget 
yum install -y sudo 

-y - це припущення так, якщо вам буде запропоновано будь-яке запитання після запиту yum install name


0

Якщо ви насправді хочете невеликий редактор для простого ведення домашнього господарства в Docker, використовуйте це у своєму Dockerfile:

RUN apt-get install -y busybox && ln -s /bin/busybox /bin/vi

Я використовував його на докері на базі Ubuntu 18. (Звичайно, вам може знадобитися RUN apt-get updateперед цим, але якщо ви створюєте власний файл Docker, ви, напевно, це вже маєте.)


0

Якщо вам потрібно змінити файл лише один раз. Вам слід віддати перевагу вносити зміни локально та створити новий образ докера за допомогою цього файлу.

Скажімо, у зображенні докера вам потрібно змінити файл з іменем myFile.xml під / path / to / docker / image /. Отже, вам потрібно це зробити.

  1. Скопіюйте myFile.xml у свою локальну файлову систему та внесіть необхідні зміни.
  2. Створіть файл із назвою 'Dockerfile' із таким вмістом -
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

Потім створіть власний образ докера за допомогою docker build -t docker-repo:v-x.x.x .

Потім використовуйте ваш щойно побудований образ докера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.