Не можете использовать команду vi или vim в контейнере Docker? - PullRequest
0 голосов
/ 08 июня 2019

Это CentOS 7, уже установлены vi и vim в моем CentOS, и я могу их использовать.Я запускаю docker в CentOS, когда извиняюсь за следующую строку:

docker exec -it mysolr /bin/bash

Я не могу использовать vi / vim в контейнере solr:

bash: vim: command not found

Почему это так и как мне исправитьчтобы я мог использовать vi / vim для редактирования файла в контейнере Docker?

1 Ответ

0 голосов
/ 08 июня 2019

Типичный образ Docker содержит минимальный набор библиотек и утилит для запуска одной конкретной программы. Кроме того, файловые системы контейнера Docker не являются долгоживущими: удаление и воссоздание контейнера является чрезвычайно обычной процедурой, например, для использования более новой версии базового образа.

Результатом этого является то, что вы никогда не хотите напрямую редактировать файлы в контейнере Docker, и большинство изображений не настроены с помощью "богатых" инструментов редактирования. ( BusyBox содержит минимальное значение vi, поэтому большинство изображений на основе Alpine также будут.) Если вы внесете какое-либо изменение, оно будет потеряно, как только вы удалите контейнер. (Точно так же вы обычно можете установить vim или emacs или что-то еще, но это будет потеряно, как только контейнер будет удален: установка программного обеспечения в работающий контейнер обычно не является лучшей практикой. ) * +1010 *

Есть два хороших способа справиться с этим, в зависимости от того, что это за файл.

Если файл является частью приложения , подобно исходному файлу, отредактируйте, отладьте и протестируйте его вне пространства Docker. Как только вы убедитесь, что это правильно (запустив модульные тесты и запустив программу локально), docker build создайте новый образ и docker run новый контейнер с новым образом.

ed config.py
pytest
docker build -t imagename .
docker run -d -p ... --name containername imagename
...
ed config.py
pytest
docker build -t imagename .
docker stop containername
docker run -d -p ... --name containername imagename

Если файл конфигурации , который необходимо вставить при запуске приложения, опция docker run -v - это хороший способ вставить его. Вы можете напрямую отредактировать файл конфигурации на своем хосте, но вам, вероятно, потребуется перезапустить (или удалить и заново создать) контейнер, чтобы он это заметил.

ed config.txt
docker run \
  -v $PWD/config.txt:/etc/whatever/config.txt \
  --name containername -p ... \
  imagename
...
ed config.txt
docker stop containername
docker rm containername
docker run ... imagename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...