Docker中没有vi命令无法编辑文件问题解决

在docker环境中,往往没有安装 vi/vim/nano 等编辑命令。这导致编辑文件显示得比较繁琐,以下列举几种常见的处理方法。

通过复制容器内数据进行修改

  1. 复制容器内的文件到宿主机,命令如下:

    # docker cp 容器id:容器内路径 宿主机路径
    docker cp mysql:/yyzmain/main.txt .

  2. 重新复制新的文件到容器内

    # docker cp 宿主机路径 容器id:容器内路径
    docker cp ./main.txt mysql:/root/yyzmain/

在容器中安装vim命令

再容器中安装额外的命令,会造成不必要的资源消耗,因此被不推荐

  1. 进入容器,以mysql容器为例,命令如下:

    # docker exec -it 容器ID bash
    docker exec -it mysql  bash
  2. 安装vim命令

    直接执行如下命令安装vim

    apt-get install vim

  3. 若安装vim报如下错误

    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package vi

    则更新软件包,执行如下命令

    apt-get update

直接挂载目录

Docker中使用 -v 或 --volume 参数可以将宿主机的目录挂载到容器内部。-v 参数的格式为:

-v <宿主机目录>:<容器目录>

例如安装mysql的如下命令:

docker run -p 3306:3306 --name mysql \
-v /yyzmain/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=yyzmain \
-d mysql:5.7

其中的-v /yyzmain/mysql:/var/lib/mysql会将宿主机上的 /yyzmain/mysql 目录挂载到容器内部的 /var/lib/mysql目录

-v 参数常见的用法有:

  • 将宿主机目录挂载到容器内,用于数据共享、配置文件管理等。

  • 存储容器数据,当容器删除时,宿主机目录中的数据不会删除。

  • 在宿主机上直接操作容器内的数据,无需进入容器。

  • 将本地代码目录挂载到容器中,实现代码的实时同步和开发调试。

  • 挂载宿主机的配置文件目录到容器中,实现容器配置的自定义。

  • 挂载宿主机的日志目录,实现容器日志的持久化存储。

需要注意:

  • 目录权限问题,可能需要调整目录的属主属组。

  • 如果挂载的目录为空,Docker 会自动给它填充内容。

  • 使用绝对路径而不是相对路径挂载,更清晰明确。