这是CentOS 7,已经在我的CentOS中安装了vi和vim,我可以使用它们。当我在下面执行以下代码时,我在CentOS中运行了Docker:
docker exec -it mysolr /bin/bash
我不能在solr容器中使用vi / vim:
bash: vim: command not found
为什么?为什么要修复它,以便可以使用vi / vim在Docker容器中编辑文件?
答案 0 :(得分:0)
典型的Docker映像包含最少的一组库和实用程序,用于运行一个特定程序。此外,Docker容器文件系统的生命周期不是很长:删除和重新创建容器是极其例行的事,例如,使用较新版本的基础映像。
其结果是,您永远不想直接编辑Docker容器中的文件,并且大多数映像都没有使用“丰富”的编辑工具进行设置。 (BusyBox包含最少的vi
,因此大多数基于Alpine的图像也将包含。)如果进行某些更改,则在删除容器后,它将丢失。 (类似地,您通常可以 安装vim
或emacs
或其他任何方法,但是一旦删除容器,它就会丢失:在运行的容器中安装软件并不是通常是最佳做法。)
有两种方法可以解决此问题,具体取决于文件类型。
如果文件是应用程序的一部分,例如源文件,请在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
如果文件是应用程序启动时需要注入的 configuration 文件,则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