迁移docker部署的gitlab过程(经实战)
很多时候为了节省硬盘或者扩容硬盘,需要将 Docker 部署的 GitLab 数据迁移到另一块硬盘,核心在于停止容器 -> 迁移数据卷 -> 修改挂载路径 -> 修正权限 -> 重启容器。
重要提示
- 操作前务必备份:防止迁移过程中数据损坏。
- 权限问题:GitLab 对文件权限非常敏感,迁移后必须修正所有者权限(通常为
998:998)。 - 停机时间:迁移期间 GitLab 无法访问,请选择业务低峰期操作。
第一步:准备工作
确认新硬盘挂载点 假设新硬盘已挂载到 /mnt/new_disk,你计划将数据存放在 /mnt/new_disk/gitlab。
df -h # 确认新硬盘挂载点
mkdir -p /mnt/new_disk/gitlab/{config,logs,data}确认当前 GitLab 容器信息 查看当前容器的挂载路径(以便确认源数据位置):
docker inspect gitlab | grep Mounts -A 20 # 或者如果是 docker-compose docker-compose ps
第二步:停止 GitLab 服务
为了保证数据一致性,必须停止容器。
# 如果是 docker-compose 部署 cd /path/to/your/gitlab-compose docker-compose down # 如果是 docker run 部署 docker stop gitlab docker rm gitlab # 迁移通常建议删除旧容器重新创建,数据在卷里不会丢
第三步:迁移数据
使用 rsync 迁移数据,它能保留文件权限、软链接和时间戳,比 cp 更安全。
# 语法:rsync -av [源路径/] [目标路径/] # 注意:源路径末尾加 / 表示复制目录内容,不加表示复制目录本身 sudo rsync -av /opt/gitlab/config/ /mnt/new_disk/gitlab/config/ sudo rsync -av /opt/gitlab/logs/ /mnt/new_disk/gitlab/logs/ sudo rsync -av /opt/gitlab/data/ /mnt/new_disk/gitlab/data/
第四步:修改配置文件
你需要告诉 Docker 新的数据路径在哪里。
情况 A:使用 docker-compose.yml (推荐)
编辑 docker-compose.yml 文件,修改 volumes 部分:
version: '3'
services:
web:
image: 'gitlab/gitlab-ce:latest'
# ... 其他配置 ...
volumes:
# 修改为新的硬盘路径
- '/mnt/new_disk/gitlab/config:/etc/gitlab'
- '/mnt/new_disk/gitlab/logs:/var/log/gitlab'
- '/mnt/new_disk/gitlab/data:/var/opt/gitlab'情况 B:使用 docker run 命令
在重新运行容器时,修改 -v 参数:
docker run -d \
--hostname gitlab.example.com \
-p 443:443 -p 80:80 -p 2222:22 \
--name gitlab \
--restart always \
# 下面三行修改为新路径
-v /mnt/new_disk/gitlab/config:/etc/gitlab \
-v /mnt/new_disk/gitlab/logs:/var/log/gitlab \
-v /mnt/new_disk/gitlab//var/opt/gitlab \
gitlab/gitlab-ce:latest第五步:修正文件权限 (关键步骤)
GitLab 的 Docker 镜像内部通常使用用户 ID 998 运行。如果新硬盘的文件所有者不是 998,GitLab 将无法启动或报错 Permission denied。
# 将新目录的所有者递归修改为 998:998 sudo chown -R 998:998 /mnt/new_disk/gitlab/ # 确保目录权限正确 sudo chmod -R 755 /mnt/new_disk/gitlab/
第六步:启动并验证
启动容器
# docker-compose docker-compose up -d # docker run # (执行上面的 docker run 命令)
观察日志
查看启动日志,确保没有 Permission denied 错误:
docker logs -f gitlab
当看到 gitlab Reconfigured. 或 ok: run: gitlab-workhorse: (pid ...) 等字样,说明启动成功。
- 访问验证
- 打开浏览器访问 GitLab 地址。
- 尝试登录、查看项目、提交代码。
- 检查后台设置中的存储路径是否正常。
第七步:清理旧数据 (确认无误后)
运行稳定 1-2 天确认无误后,再删除旧数据释放空间:
# 备份旧数据以防万一 mv /opt/gitlab /opt/gitlab.bak # 确认一切正常后再删除 # rm -rf /opt/gitlab.bak
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
docker镜像无法删除 Error:No such image:xxxxxx解决
这篇文章主要介绍了docker镜像无法删除 Error:No such image:xxxxxx解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09


最新评论