文章目录
场景
- 服务器:阿里云
- 容器技术: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
下的 nginx
、redis
、mongo
容器迁移到 /mntd/docker
,并重新启动它们。以下是详细步骤:
1. 停止当前运行的容器
在迁移之前,先停止所有容器,避免数据不一致:
cd /mnt/docker
docker-compose down # 停止并删除容器(但保留数据卷)
2. 复制 /mnt/docker
到 /mntd/docker
使用 rsync
或 cp
复制整个目录(包括 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 ps 、docker-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