You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu服务器Docker Compose重启后卷数据丢失问题求助

解决Ubuntu服务器Docker卷重启后数据丢失问题

核心原因分析

Ubuntu服务器上Postgres容器的卷目录权限不匹配,导致容器启动时无法读取原有数据,自动初始化新数据库;或是GitLab Runner用户的Docker操作权限不足,引发卷操作异常。

具体解决步骤

1. 修复Postgres卷目录权限

在GitLab CI部署脚本中加入权限修复步骤,确保容器内的postgres用户(UID/GID为999)能正常访问卷目录:

修改后的deploy脚本:

deploy:
  stage: deploy
  script:
    - echo "Deploying application..."
    - docker login -u "gitlab-ci-token" -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker-compose down
    # 适配Postgres容器内用户权限
    - docker run --rm -v content_hunter_volume:/data alpine chown -R 999:999 /data
    - docker-compose up -d
    - echo "Application successfully deployed"

2. 赋予GitLab Runner用户Docker操作权限

Shell类型Runner默认使用gitlab-runner用户执行命令,需将其加入docker组以获取完整操作权限:

在服务器上执行以下命令:

sudo usermod -aG docker gitlab-runner
sudo systemctl restart gitlab-runner

3. 验证手动操作是否正常

先在服务器上手动执行部署流程,排除CI脚本外的问题:

# 进入项目目录
cd /path/to/your/project
docker-compose down
docker-compose up -d
# 检查数据库数据是否保留
docker exec -it content_hunter_db psql -U postgres -d content_hunter -c "SELECT * FROM your_table;"

如果手动操作数据不丢失,说明问题确实出在CI Runner的权限或脚本步骤上,按前两步调整即可。

4. 可选:改用绑定挂载替代命名卷

若命名卷权限问题难以排查,可改用本地目录绑定挂载,直接控制目录权限:

修改docker-compose.yml的volumes配置:

db:
    # 其他配置保持不变
    volumes:
      - /opt/postgres-data:/var/lib/postgresql/data/:rw

# 移除原命名卷定义
# volumes:
#     content_hunter_volume:
#         name: "content_hunter_volume"

然后在服务器上创建目录并设置权限:

sudo mkdir -p /opt/postgres-data
sudo chown -R 999:999 /opt/postgres-data

内容的提问来源于stack exchange,提问作者silenzzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:06:04