docker - 无法在 docker 容器中使用 vi 或 vim 命令?
问题描述
它是 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 容器中编辑文件,而且大多数图像都没有设置“丰富”的编辑工具。(BusyBox包含一个最小的vi
,因此大多数基于 Alpine 的图像也将。)如果您进行一些更改,一旦您删除容器,它就会丢失。(同样,您通常可以安装vim
oremacs
或其他任何东西,但一旦容器被删除,它就会丢失:在运行的容器中安装软件通常不是最佳实践。)
有两种很好的方法可以解决这个问题,具体取决于它是什么类型的文件。
如果文件是应用程序的一部分,例如源文件,请在 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
推荐阅读
- java - 如何将 Java 文件添加到构建路径 Android Studio
- html - 电子邮件 HTML - 无法使用 _ 而不是 - 正确换行的行
- nginx - 静态文件的 Nginx 设置
- javascript - 从:悬停到反应中的切换按钮
- c - 在盒子或其他容器中对齐小部件(例如 GtkLabel 和 GtkEntry) - 最佳实践
- batch-file - 批处理脚本变量 - 从具有多行变量选项的文本文件的单行中提取
- angular - 如何在运行时更改 ng-zorro 主题
- ios - 出现键盘时无法上移自定义 UIView
- macos - 在 macos 上 ping 成功时 cURL 失败
- java - 如何在 Java 中按一个字段对 cvs 文件进行排序?