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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是在 Docker Compose 中安装 xxl-job 并挂载配置文件,并在配置文件中设置 xxl-job 连接的数据库的具体步骤: 1. 创建一个 Docker Compose 文件,比如 `docker-compose.yml`,并在其中定义 xxl-job 的服务。以下是一个示例文件: ```yaml version: '3' services: xxl-job: image: xxl-job:2.2.0 container_name: xxl-job ports: - "8080:8080" volumes: - ./conf:/opt/xxl-job/conf environment: - DB_HOST=192.168.0.100 - DB_PORT=3306 - DB_NAME=xxl_job - DB_USERNAME=root - DB_PASSWORD=123456 ``` 其中,`image` 指定了 xxl-job 的 Docker 镜像,`container_name` 指定了容器的名称,`ports` 指定了容器内部和宿主机之间的端口映射关系,`volumes` 则指定了容器内部和宿主机之间的文件共享关系。这里将 `./conf` 目录挂载到了容器内部的 `/opt/xxl-job/conf` 目录。 在 `environment` 中,设置了 xxl-job 连接的数据库的相关参数。这里假设 xxl-job 要连接的数据库的地址为 `192.168.0.100`,端口为 `3306`,数据库名为 `xxl_job`,用户名为 `root`,密码为 `123456`。 2. 在 `./conf` 目录中创建 `xxl-job.properties` 配置文件,并在其中添加 xxl-job 连接数据库的相关配置,比如: ```properties xxl.job.executor.ip= xxl.job.executor.port=9999 xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler xxl.job.executor.logretentiondays=7 xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin xxl.job.accessToken= xxl.job.executor.fail.retrial=0 xxl.job.executor.fail.handle.thread.count=1 xxl.job.executor.fail.handle.max.thread.count=3 xxl.job.executor.fail.handle.queue.size=10000 # DataSource spring.datasource.url=jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true spring.datasource.username=${DB_USERNAME} spring.datasource.password=${DB_PASSWORD} spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 其中,`spring.datasource.url` 设置了 xxl-job 连接的数据库的 URL,`${DB_HOST}` 和 `${DB_PORT}` 是通过环境变量传入的,`${DB_NAME}`、`${DB_USERNAME}` 和 `${DB_PASSWORD}` 则是在 `docker-compose.yml` 文件中设置的环境变量。 3. 在 Docker Compose 文件所在的目录中,执行以下命令启动 xxl-job 服务: ```bash docker-compose up -d ``` 4. 验证 xxl-job 服务是否启动成功。可以通过以下命令查看容器运行状态: ```bash docker ps ``` 如果 xxl-job 的容器状态为 `Up`,说明服务已经成功启动。另外,可以通过浏览器访问 `http://localhost:8080/xxl-job-admin` 来验证 xxl-job 的管理页面是否可用。 以上就是在 Docker Compose 中安装 xxl-job 并挂载配置文件,并在配置文件中设置 xxl-job 连接的数据库的详细步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值