【docker 迁移 - 下】迁移 Docker 容器(/mnt/docker → /mntd/docker)

发布于:2025-07-08 ⋅ 阅读:(15) ⋅ 点赞:(0)

场景

  • 服务器:阿里云
  • 容器技术:docker + docker-compose
  • 容器:nginx、redis、mysql、mongo、spring boot 微服务
  • 磁盘容量:40G
  • 内存:8G

一、问题

  • mongo异常关闭

二、原因

  • 部署人员安装时没有查看客户磁盘容量,随着业务提升,磁盘容量不够用,影响数据库读写和整个业务
  • 内存没有做限制,mongodb占用过大影响其它业务

三、解决方案

  • 挂在数据盘,将docker所有容器迁移
  • 对容器内存资源限制(容器:nginx、redis、mysql、mongo、spring boot 微服务)

四、实战一:阿里云新买云盘并挂载

五、实战二:迁移 Docker 容器(/mnt/docker → /mntd/docker)

迁移 Docker 容器(/mnt/docker/mntd/docker)并重新启动

你的目标是将运行在 /mnt/docker 下的 nginxredismongo 容器迁移到 /mntd/docker,并重新启动它们。以下是详细步骤:


1. 停止当前运行的容器

在迁移之前,先停止所有容器,避免数据不一致:

cd /mnt/docker
docker-compose down  # 停止并删除容器(但保留数据卷)

2. 复制 /mnt/docker/mntd/docker

使用 rsynccp 复制整个目录(包括 docker-compose.yml 和数据卷):

sudo rsync -avh --progress /mnt/docker/ /mntd/docker/

或:

sudo cp -a /mnt/docker /mntd/

验证复制是否成功

ls -l /mntd/docker  # 确保所有文件(包括隐藏文件)都已复制

3. 修改 docker-compose.yml(如有必要)

如果 docker-compose.yml 里使用了 绝对路径(如 /mnt/docker/nginx/config),需要更新路径:

cd /mntd/docker
nano docker-compose.yml  # 或 vim/vi

示例修改

services:
  nginx:
    volumes:
      - "/mntd/docker/nginx/config:/etc/nginx/conf.d"  # 修改路径
  redis:
    volumes:
      - "/mntd/docker/redis/data:/data"  # 修改路径
  mongo:
    volumes:
      - "/mntd/docker/mongo/data:/data/db"  # 修改路径

如果使用相对路径(如 ./nginx/config),则无需修改


4. 重新启动容器

进入新目录并启动:

cd /mntd/docker
docker-compose up -d  # 后台启动

验证容器是否运行

docker ps  # 查看 nginx、redis、mongo 是否运行
docker-compose logs  # 检查日志是否有错误

5. 清理旧数据(可选)

如果迁移成功,可以删除旧目录:

sudo rm -rf /mnt/docker  # 谨慎操作,确保数据已备份!

可能遇到的问题及解决方案

问题1:容器启动失败(权限错误)

  • 原因/mntd/docker 下的文件权限可能不正确。
  • 解决
    sudo chown -R $USER:$USER /mntd/docker  # 修改所属用户
    sudo chmod -R 755 /mntd/docker  # 调整权限(视情况而定)
    

问题2:Docker 找不到数据卷

  • 原因docker-compose.yml 中的 volumes 路径未更新。
  • 解决:检查 docker-compose.yml,确保所有路径指向 /mntd/docker/...

问题3:端口冲突

  • 原因:如果旧容器未完全停止,新容器可能因端口占用无法启动。
  • 解决
    docker-compose down  # 确保旧容器已停止
    docker-compose up -d  # 重新启动
    

总结

步骤 命令
1. 停止旧容器 cd /mnt/docker && docker-compose down
2. 复制数据 sudo rsync -avh /mnt/docker/ /mntd/docker/
3. 修改 docker-compose.yml(如有必要) nano /mntd/docker/docker-compose.yml
4. 启动新容器 cd /mntd/docker && docker-compose up -d
5. 检查状态 docker psdocker-compose logs

迁移完成后,确保所有服务(Nginx、Redis、MongoDB)正常运行,访问测试是否成功。

六、实战三:限制容器内存

Step 1:下载 docker-compose

#****************安装docker-compose****************
# 下载 Linux x86_64 版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

Step 2:修改容器内存限制(docker-compose.yaml)

    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 1G

在这里插入图片描述

Step 3:执行docker-compose.yaml

  cd /mntd/docker/
  docker-compose --compatibility up -d --build