问题背景
- 起初有一个Mysql的容器,是一直用来测试的,只挂载了my.cof的配置文件
- 后续有一个需求是需要做mysql容器的自动备份与恢复需要挂载mysql目录,不想再删除重建容器了,就想着看能不能直接为当前这个已运行的mysql容器添加一个挂载目录,这样就不用麻烦删除重建倒一波了,也测试一下修改已运行容器参数的情况
操作步骤
- 先将需要挂载的目录复制出来
docker cp mysql8.0:/var/lib/mysql /var/data/MYSQL
- 查看容器存放根目录
[root@SKSGW ~]WARNING: IPv4 forwarding is disabled
Docker Root Dir: /var/lib/docker
- 查看要操作的容器id
[root@SKSGW ~]
bcf974372778 mysql:8.0-mod "docker-entrypoint.s…" 3 weeks ago Up 19 minutes mysql8.0
- 进入该容器对应的存放目录(在容器存放根目录下的/containers找容器id开头的目录)
[root@SKSGW ~]
[root@SKSGW bcf97437277898994ad2dcb1cba14d719378f080400e3ff970658c0fa9af8b66]
bcf97437277898994ad2dcb1cba14d719378f080400e3ff970658c0fa9af8b66-json.log checkpoints config.v2.json hostconfig.json hostname hosts mounts resolv.conf
- 关闭docker(不关闭docker的情况, 文件的更改会被覆盖, 需要关闭docker后更改, 再开启docker使其重新load)
systemctl stop docker
- 修改容器对应的配置文件(该目录下的config.v2.json)
vi config.v2.json
...
"MountPoints": {
...
"/var/lib/mysql": {
"Source": "/var/data/MYSQL",
"Destination": "/var/lib/mysql",
"RW": true,
"Name": "",
"Driver": "",
"Type": "bind",
"Relabel": "rw",
"Propagation": "rprivate",
"Spec": {
"Type": "bind",
"Source": "/var/data/MYSQL",
"Target": "/var/lib/mysql"
},
"SkipMountpointCreation": false
}
},
...
- 修改hostconfig.json
vi hostconfig.json
"Binds": [
...,
"/var/data/MYSQL:/var/lib/mysql:rw"
],
- 启动Docker服务与容器
systemctl start docker
docker start mysql8.0
原理理解
- 更改docker服务的持久化配置信息,通过重启Docker服务重新load,使得已运行的容器配置更改