docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > 迁移docker部署的gitlab

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

作者: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 ...) 等字样,说明启动成功。

第七步:清理旧数据 (确认无误后)

运行稳定 1-2 天确认无误后,再删除旧数据释放空间:

# 备份旧数据以防万一
mv /opt/gitlab /opt/gitlab.bak

# 确认一切正常后再删除
# rm -rf /opt/gitlab.bak

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文