迁移docker部署的gitlab过程(经实战)

 更新时间:2026年05月22日 09:01:25   作者:dayfoxman  
本文详细描述了如何将Docker部署的GitLab数据迁移到另一块硬盘的过程,包括包括停止容器、迁移数据卷、修改挂载路径、修正权限和重启容器等等每一步骤都有详细的说明确保迁移过程的安全性和有效性

很多时候为了节省硬盘或者扩容硬盘,需要将 Docker 部署的 GitLab 数据迁移到另一块硬盘,核心在于停止容器 -> 迁移数据卷 -> 修改挂载路径 -> 修正权限 -> 重启容器

重要提示

  1. 操作前务必备份:防止迁移过程中数据损坏。
  2. 权限问题:GitLab 对文件权限非常敏感,迁移后必须修正所有者权限(通常为 998:998)。
  3. 停机时间:迁移期间 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-compose统一管理多个容器使用详解

    docker-compose统一管理多个容器使用详解

    这篇文章主要为大家介绍了docker-compose统一管理多个容器使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 如何搭建docker虚拟机测试服

    如何搭建docker虚拟机测试服

    文章介绍如何搭建Docker虚拟机测试服,通过隔离环境、安装CentOS镜像并映射端口,配置安全组和域名转发,实现本地开发测试连接测试服数据库和Redis,感兴趣的朋友跟随小编一起学习吧
    2025-08-08
  • docker设置代理通过代理服务器拉取镜像方式

    docker设置代理通过代理服务器拉取镜像方式

    这篇文章主要介绍了docker设置代理通过代理服务器拉取镜像方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 常用的8个应用和中间件的Docker运行示例详解

    常用的8个应用和中间件的Docker运行示例详解

    Portainer是一个轻量级的管理 UI ,可让你轻松管理不同的 Docker 环境(Docker 主机或 Swarm 群集),这篇文章主要介绍了常用的8个应用和中间件的Docker运行示例,需要的朋友可以参考下
    2024-03-03
  • docker镜像无法删除 Error:No such image:xxxxxx解决

    docker镜像无法删除 Error:No such image:xxxxxx解决

    这篇文章主要介绍了docker镜像无法删除 Error:No such image:xxxxxx解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Docker Registry搭建与使用详解

    Docker Registry搭建与使用详解

    这篇文章主要介绍了Docker Registry搭建与使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Docker+K8s集成部署的实战

    Docker+K8s集成部署的实战

    本文详细介绍了Docker与Kubernetes在企业级生产环境中的集成部署实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • Docker中删除镜像与容器的完整指南

    Docker中删除镜像与容器的完整指南

    在日常使用 Docker 的过程中,未使用的镜像往往会不断累积,占用大量磁盘空间,学会高效地查找并删除不必要的镜像,不仅能回收存储容量,还能保持系统的整洁,本文将演示如何从系统中删除 Docker 镜像,需要的朋友可以参考下
    2025-09-09
  • docker安装redis挂载容器卷同时开启持久化

    docker安装redis挂载容器卷同时开启持久化

    本文主要介绍了docker安装redis挂载容器卷同时开启持久化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Docker案例分析:搭建MySQL数据库服务

    Docker案例分析:搭建MySQL数据库服务

    这篇文章主要介绍了Docker案例分析:搭建MySQL数据库服务,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论