【问题标题】:Cannot use vi or vim command in docker container?无法在 docker 容器中使用 vi 或 vim 命令?
【发布时间】:2019-10-23 16:41:09
【问题描述】:

它是 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 镜像包含运行应用程序所需的最少库,大多数情况下您没有获得 vi、vim 或其他库(如 curl) 使用任何其他 docker 基础镜像并构建您自己的容器安装必要的软件或在你的基础上安装 vi 使用诸如 apk add for alpine 或 apt get install for linux base 之类的命令
  • @BMitch 好吧,在 CentOS 中它必须是 yum/dnf,而不是 apt
  • @phd 是的,请参阅我对涵盖流行场景的同一问题的回答。 stackoverflow.com/a/48097074/596285

标签: docker vim centos centos7 vi


【解决方案1】:

一个典型的 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

如果文件是应用启动时需要注入的配置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

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2018-04-10
    • 2020-06-26
    • 2022-12-20
    • 2016-04-06
    相关资源
    最近更新 更多