docker 中没有vi 的解决方案
docker 目前如火如荼,确实方便,好多程序都提供 docker版,在日常测试中通过docker非常方便,但是会经常遇到 docker 中没有vi 命了,当需要编辑个配置文件的时候,很是不方便,这里总结记录如下。
安装 vi 命令
当然在docker中安装 vi 命令是最彻底的。以下是docker中安装vi的步骤
- 确定容器的基础镜像
首先,确定你的容器使用的是什么基础镜像(如 Debian、Ubuntu、Alpine、CentOS 等)。运行以下命令查看:
1 | cat /etc/os-release |
- 安装 vi
根据基础镜像类型选择正确的包管理工具安装 vi。
Debian/Ubuntu 系列镜像
使用 apt-get 安装 vi 或 vim:
1 | apt-get update && apt-get install -y vim |
这个通常要运行 apt-get update 否则可能会找不到vim。
Alpine 系列镜像
Alpine 是一个轻量级镜像,通常没有自带 vi。可以通过 apk 安装:
1 | apk add vim |
CentOS/RHEL 系列镜像
使用 yum 安装 vi 或 vim:
1 | yum install -y vim |
- 使用其他工具替代(临时方案)
如果不想安装 vi,可以使用以下工具进行临时编辑:
使用 echo 或 cat 直接创建或修改文件:
1 | echo "内容" > 文件名 |
如果容器内有 nano 或其他文本编辑器,可以尝试使用:
1 | nano 文件名 |
使用挂载主机文件: 在主机上编辑文件后,通过挂载的方式映射到容器:
1 | docker run -v /path/to/local/file:/path/in/container -it your-image |
其实目前最常用的docker 基础景象是 Debian/Ubuntu 系列镜像,不过目前随着版本的升级,老版本的 源都已经失效了,有的时候无法通过之间安装vim的方式,下面说下通过宿主机的方式试下
直接从容器复制文件到宿主机,编辑后再复制回去
从容器中复制文件到宿主机
使用 docker cp 命令将容器中的文件复制到宿主机:
1 | docker cp 22b1d1f05599:/var/www/html/config/config.php /path/on/host/config.php |
这会将容器中的文件复制到宿主机的 /path/on/host/config.php 路径。
在宿主机上编辑文件
使用宿主机上的文本编辑器(如 vim 或 nano)编辑文件:
1 | vim /path/on/host/config.php |
将文件复制回容器
编辑完成后,将文件复制回容器:
1 | docker cp /path/on/host/config.php 22b1d1f05599:/var/www/html/config/config.php |
方法 2:挂载宿主机目录到容器(没测试过)
如果可以重新运行容器,可以使用挂载方式直接将宿主机的文件夹挂载到容器内。
停止当前容器
1 | docker stop 22b1d1f05599 |
启动时挂载文件或目录
将宿主机上的文件夹或文件挂载到容器中。例如:
1 | docker run -v /path/on/host/config.php:/var/www/html/config/config.php -it your-image |
这样,你可以直接在宿主机上编辑 /path/on/host/config.php 文件,修改内容会直接反映在容器中。
原文作者: liups.com
原文链接: http://liups.com/posts/71938eb2/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议