问题背景
- 起初有一个Mysql的容器,是一直用来测试的,只挂载了my.cof的配置文件
- 后续有一个需求是需要做mysql容器的自动备份与恢复需要挂载mysql目录,不想再删除重建容器了,就想着看能不能直接为当前这个已运行的mysql容器添加一个挂载目录,这样就不用麻烦删除重建倒一波了,也测试一下修改已运行容器参数的情况
操作步骤
- 先将需要挂载的目录复制出来
docker cp mysql8.0:/var/lib/mysql /var/data/MYSQL
- 查看容器存放根目录
# docker info | grep 'Root'
[root@SKSGW ~]WARNING: IPv4 forwarding is disabled
Docker Root Dir: /var/lib/docker
- 查看要操作的容器id
[root@SKSGW ~]# docker ps | grep mysql
bcf974372778 mysql:8.0-mod "docker-entrypoint.s…" 3 weeks ago Up 19 minutes mysql8.0
- 进入该容器对应的存放目录(在容器存放根目录下的/containers找容器id开头的目录)
[root@SKSGW ~]# cd /var/lib/docker/containers/bcf97437277898994ad2dcb1cba14d719378f080400e3ff970658c0fa9af8b66/
[root@SKSGW bcf97437277898994ad2dcb1cba14d719378f080400e3ff970658c0fa9af8b66]# ls
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
# vi中想要格式化该json,可以使用`:%!python3 -m json.tool`指令
# 找到`MountPoints`项,并类似这样添加一下
# json的key、以及`Destination`、`Spec`中的`Target`为容器中目录,我这里是`/var/lib/mysql`
# `Source`以及`Spec`中的`Source`,是第一步中复制出来的待挂载目录
...
"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
# vi中想要格式化该json,可以使用`:%!python3 -m json.tool`指令
# 找到`Binds`字段,添加"/var/data/MYSQL:/var/lib/mysql:rw"格式为"宿主机待挂载目录:容器待挂载目录:挂载模式(一般为rw可读可写)",前面如果还有挂载的话记得加逗号
#
"Binds": [
...,
"/var/data/MYSQL:/var/lib/mysql:rw"
],
- 启动Docker服务与容器
systemctl start docker
docker start mysql8.0