Docker-为已运行的容器添加挂载目录

Docker-为已运行的容器添加挂载目录

问题背景

  • 起初有一个Mysql的容器,是一直用来测试的,只挂载了my.cof的配置文件
  • 后续有一个需求是需要做mysql容器的自动备份与恢复需要挂载mysql目录,不想再删除重建容器了,就想着看能不能直接为当前这个已运行的mysql容器添加一个挂载目录,这样就不用麻烦删除重建倒一波了,也测试一下修改已运行容器参数的情况

操作步骤

  1. 先将需要挂载的目录复制出来
docker cp mysql8.0:/var/lib/mysql /var/data/MYSQL
  1. 查看容器存放根目录
# docker info | grep 'Root'
[root@SKSGW ~]WARNING: IPv4 forwarding is disabled
Docker Root Dir: /var/lib/docker
  1. 查看要操作的容器id
[root@SKSGW ~]# docker ps | grep mysql
bcf974372778        mysql:8.0-mod                                             "docker-entrypoint.s…"   3 weeks ago         Up 19 minutes                           mysql8.0
  1. 进入该容器对应的存放目录(在容器存放根目录下的/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
  1. 关闭docker(不关闭docker的情况, 文件的更改会被覆盖, 需要关闭docker后更改, 再开启docker使其重新load)
systemctl stop docker
  1. 修改容器对应的配置文件(该目录下的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
        }
    },
    ...

  1. 修改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"
],
  1. 启动Docker服务与容器
systemctl start docker
docker start mysql8.0

原理理解

  • 更改docker服务的持久化配置信息,通过重启Docker服务重新load,使得已运行的容器配置更改
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值