说明:本文介绍修改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的数据。所以,如果你不小心删除了容器,也不要担心数据会丢失,可以再运行一个容器,然后挂载这个数据卷,这样运行的容器就是有历史数据的(亲测有效)
总结
本文介绍了修改Docker容器内文件的三种方式,以及关于Docker数据卷使用的trick。参考下面这篇文章:
- docker容器内怎么编辑文件