无法在Docker容器中使用vi或vim命令?

时间:2019-06-08 13:16:18

标签: docker vim centos centos7 vi

这是CentOS 7,已经在我的CentOS中安装了vi和vim,我可以使用它们。当我在下面执行以下代码时,我在CentOS中运行了Docker:

docker exec -it mysolr /bin/bash

我不能在solr容器中使用vi / vim:

bash: vim: command not found

为什么?为什么要修复它,以便可以使用vi / vim在Docker容器中编辑文件?

1 个答案:

答案 0 :(得分:0)

典型的Docker映像包含最少的一组库和实用程序,用于运行一个特定程序。此外,Docker容器文件系统的生命周期不是很长:删除和重新创建容器是极其例行的事,例如,使用较新版本的基础映像。

其结果是,您永远不想直接编辑Docker容器中的文件,并且大多数映像都没有使用“丰富”的编辑工具进行设置。 (BusyBox包含最少的vi,因此大多数基于Alpine的图像也将包含。)如果进行某些更改,则在删除容器后,它将丢失。 (类似地,您通常可以 安装vimemacs或其他任何方法,但是一旦删除容器,它就会丢失:在运行的容器中安装软件并不是通常是最佳做法。)

有两种方法可以解决此问题,具体取决于文件类型。

如果文件是应用程序的一部分,例如源文件,请在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