docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > 修改Docker容器内文件方式

修改Docker容器内文件的三种实现方式

作者:何中应

这篇文章主要介绍了修改Docker容器内文件的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

说明:本文介绍修改Docker容器内文件的三种方式

方式一:直接修改

敲下面的命令,进入Docker容器,如mysql

docker exec -it mysql /bin/bash

修改mysql的配置文件,/etc/my.cnf

vim /etc/my.cnf

如下,如果vim不行,可试下vi或其他编辑命令,总之,我试了一些编辑命令,是无法编辑的

方式二:将文件复制到容器外

敲下面的命令,将容器内需要修改的文件拷贝到容器外面,如mysql容器,将容器内的配置文件复制到容器外。

如下,将my.cnf复制到容器外的当前位置

docker cp mysql:/etc/my.cnf ./

修改配置,如端口号,改回3306

修改完成,敲下面的命令,将文件复制回容器里

docker cp ./my.cnf mysql:/etc/

进入容器查看,可见修改成功。

这时重启容器,容器内MySQL服务的端口就是3306

方式三:使用数据卷

敲下面的命令,创建一个数据卷;

docker volume create mysql

敲下面的命令,查看已创建的数据卷;

docker volume ls

运行容器时,加上-v 数据卷名称:容器内路径挂载数据卷,这样容器内的文件就可以在容器外修改了,是同步的。

如下,我想把mysql容器内的/etc路径挂载到mysql数据卷上。

docker run --name=mysql -v mysql:/etc -e MYSQL_ROOT_PASSWORD=123456 -p 4406:4406 -d mysql:8.1.0

敲下面的命令,查看数据卷挂载的、容器内路径在哪里,这里的mysql是数据卷的名称。

docker volume inspect mysql

切换到这个路径,可以看到这里的文件其实就是mysql容器内下的/etc文件夹,在这里我们可以直接修改MySQL配置文件,my.cnf

端口号设置为4406,因为刚刚启动容器指定的容器内端口是4406,不改成4406是没法使用MySQL的

修改完,重启容器生效。

另外

另外,关于容器的数据卷。我们运行容器时,docker会自动为我们挂载一个数据卷,保存容器内的应用产生的数据,可敲下面的命令查看

docker inspect -f '{{range .Mounts}}{{.Name}} {{end}}' 容器名

如上,是我创建的MySQL容器自动创建的数据卷。这个数据卷挂载的是容器内/var/lib/mysql路径,该路径下存储了MySQL的数据。

所以,如果你不小心删除了容器,也不要担心数据会丢失,可以再运行一个容器,然后挂载这个数据卷,这样运行的容器就是有历史数据的(亲测有效)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文