Как запустить vi в контейнере докеров?


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 02

36

Ваш контейнер, вероятно, не установил его из коробки.

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


2
Да, но я предпочитаю vim-tiny(Ubuntu)
Бен Уэйли

2
Перед запуском «apt-get install vim» вам необходимо запустить «apt-get update».
user1521213

2
Первое apt-get updateТОapt-get install vim
Йоги Гореча

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

Это следует делать только на ранней стадии разработки. Как только вы получите рабочий контейнер, изменения файлов должны быть внесены в ваш образ или конфигурации, хранящиеся вне вашего контейнера. Обновите свой Dockerfile и другие файлы, которые он использует для создания нового образа. Это определенно не следует делать в производственной среде, поскольку изменения внутри контейнера являются недолговечными и будут потеряны при замене контейнера.


1
ОШИБКА:
невозможно

1
Команды @ garg10may необходимо запускать от имени пользователя root. USER rootвнутри Dockerfile делает это, но обязательно переключитесь обратно на другого пользователя. Я бегущий контейнер:docker exec -u root ...
BMitch 06

19

ИСПОЛЬЗОВАТЬ ЭТО:

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

Объяснение вышеуказанной команды

  1. apt-get update => Обновит текущий пакет
  2. apt-get install => Установит пакет
  3. -y => Пропустить разрешение, разрешение по умолчанию будет установлено на Да.
  4. vim => Имя пакета, который вы хотите установить.

12

Добавьте следующую строку в свой Dockerfile, затем перестройте образ докера.

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. Чтобы сделать его доступным для всех контейнеров, отредактируйте Dockerfile и добавьте

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

или вы также можете расширить образ в новом Dockerfile и добавить команду выше. Например.

ОТ <имя изображения>

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


1

Внутри контейнера (в докере, а не в виртуальной машине) по умолчанию они не установлены. Даже apt-get , wget работать не будет. Моя виртуальная машина работает на Ubuntu 17.10. Для меня ни пакета manaager работал.

Yum не является частью debian или ubuntu. Это часть красной шляпы. Но он работает в Ubuntu и по умолчанию устанавливается как apt-get

Tu install vim, используйте эту команду

yum install -y vim-enhanced 

Чтобы удалить vim:

yum uninstall -y vim-enhanced 

По аналогии,

yum install -y wget 
yum install -y sudo 

-y означает, что да, если будет предложено ввести любой запрос после выполнения yum install packagename


0

Если вам действительно нужен небольшой редактор для простого обслуживания в докере, используйте его в своем Dockerfile:

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

Я использовал его на докере на базе Ubuntu 18. (Конечно, вам может понадобиться RUN apt-get updateперед этим, но если вы создаете свой собственный файл Docker, у вас, вероятно, он уже есть.)


0

Если вам нужно изменить файл только один раз. Вы должны предпочесть вносить изменения локально и создать новый образ докера с этим файлом.

Скажем, в образе докера вам нужно изменить файл с именем myFile.xml в / path / на / 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.