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

无法在docker容器中使用vi或vim命令?,docker,vim,centos,centos7,vi,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容器中编辑文件?典型的docker映像包含一组最小的库和实用程序,用于运行一个特定的程序。此外,Docker容器文件系统的寿命并不

它是CentOS 7,已经在我的CentOS中安装了vi和vim,我可以使用它们。我在CentOS运行docker,当我执行以下命令时:

docker exec -it mysolr /bin/bash
我无法在solr容器中使用vi/vim:

bash: vim: command not found

为什么会这样?我如何修复它,以便使用vi/vim在docker容器中编辑文件?

典型的docker映像包含一组最小的库和实用程序,用于运行一个特定的程序。此外,Docker容器文件系统的寿命并不长:删除和重新创建容器(例如使用较新版本的基本映像)是非常常规的

这样做的结果是,您永远不希望直接编辑Docker容器中的文件,而且大多数图像都没有使用“丰富”的编辑工具进行设置。(包含最小的
vi
,因此大多数基于阿尔卑斯山的图像也将如此。)如果您进行了一些更改,它将在删除容器后立即丢失。(类似地,您通常可以安装
vim
emacs
或任何东西,但一旦删除容器,它就会丢失:在运行的容器中安装软件通常不是最佳做法。)

根据文件的类型,有两种很好的处理方法

如果文件是应用程序的一部分,如源文件,请在Docker空间之外对其进行编辑、调试和测试。一旦您确信它是正确的(通过运行单元测试和本地运行程序),
docker用它构建一个新映像,然后
docker用新映像运行一个新容器

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

Docker映像包含运行应用程序所需的最少库,大多数情况下,您无法获得vi,vim或其他LIB(如curl)与它们一起使用任何其他docker base映像并构建您自己的容器,安装必要的软件,或使用apk add for alpine或apt get install for linux base等命令在您的base中安装vi可能重复:@BMitch嗯,在CentOS中它必须是
yum/dnf
,而不是
apt
@phd yes,看看我对这个问题的回答,这个问题涵盖了流行的场景。