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

GitLab容器适配docker-compose v1正常,v2启动失败循环重启问题排查

升级Docker Compose v1到v2后GitLab容器循环重启的解决方法

升级Docker Compose从v1到v2后,GitLab容器出现循环重启,日志重复提示数据库连接未配置的错误,而postgresql和redis容器均正常运行。

错误日志

gitlab_1      | ERROR: 
gitlab_1      |   Please configure the database connection.
gitlab_1      |   Refer http://git.io/wkYhyA for more information.
gitlab_1      |   Cannot continue without a database. Aborting...

容器状态

CONTAINER ID        IMAGE                                                 COMMAND                  CREATED              STATUS                          PORTS                                NAMES
0fc7c9e5fed3        sameersbn/gitlab:13.12.4                              "/sbin/entrypoint.sh…"   About a minute ago   Restarting (1) 42 seconds ago                                        gitlab_gitlab_1
ca58e9c97153        sameersbn/postgresql:12-20200524                      "/sbin/entrypoint.sh"    About a minute ago   Up About a minute               5432/tcp                             gitlab_postgresql_1
4799998c8ebb        sameersbn/redis:latest                                "/sbin/entrypoint.sh"    About a minute ago   Up About a minute               6379/tcp                             gitlab_redis_1

环境版本

  • Docker版本:18.06.3-ce, build d7080c1
  • Docker-compose版本:1.28.5, build c4eb3a1f

原v1配置

postgresql:
  image: sameersbn/postgresql:12-20200524
  restart: unless-stopped
  environment:
    - DB_USER=gitlab
    - DB_PASS=mypassword
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm,btree_gist
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - /var/test/gitlab/postgresql_lib:/var/lib/postgresql
    - /var/test/gitlab/postgresql_run:/run/postgresql
gitlab:
  image: sameersbn/gitlab:13.12.4
  restart: unless-stopped
  links:
  - redis:redisio
  - postgresql:postgresql
  ports:
  - "22:22"
  environment:
    - GITLAB_BACKUP_DIR=/backups
    - GITLAB_HOST=gitlab.loc
    - GITLAB_PORT=80
    - GITLAB_SSH_PORT=22
    - GITLAB_SECRETS_DB_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
    - GITLAB_SECRETS_SECRET_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
    - GITLAB_SECRETS_OTP_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
    - GITLAB_EMAIL=gitlab@test.com
    - GITLAB_EMAIL_REPLY_TO=gitlab@test.com
    - GITLAB_TIMEZONE=Paris
    - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
    - GITLAB_NOTIFY_PUSHER=true
    - VIRTUAL_HOST=gitlab.loc
    - VIRTUAL_PORT=80
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - /srv/backups/gitlab:/backups
    - /var/test/gitlab/home:/home/git/data

redis:
  image: sameersbn/redis:latest
  restart: unless-stopped
  volumes:
    - /etc/localtime:/etc/localtime:ro

当前v2配置

version: "2.3"
services:
  postgresql:
    image: sameersbn/postgresql:12-20200524
    restart: unless-stopped
    environment:
      - DB_USER=gitlab
      - DB_PASS=mypassword
      - DB_NAME=gitlabhq_production
      - DB_EXTENSION=pg_trgm,btree_gist
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/test/gitlab/postgresql_lib:/var/lib/postgresql
      - /var/test/gitlab/postgresql_run:/run/postgresql
  gitlab:
    image: sameersbn/gitlab:13.12.4
    restart: unless-stopped
    ports:
    - "22:22"
    environment:
      - GITLAB_BACKUP_DIR=/backups
      - GITLAB_HOST=gitlab.loc
      - GITLAB_PORT=80
      - GITLAB_SSH_PORT=22
      - GITLAB_SECRETS_DB_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
      - GITLAB_SECRETS_SECRET_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
      - GITLAB_SECRETS_OTP_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
      - GITLAB_EMAIL=gitlab@test.com
      - GITLAB_EMAIL_REPLY_TO=gitlab@test.com
      - GITLAB_TIMEZONE=Paris
      - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
      - GITLAB_NOTIFY_PUSHER=true
      - VIRTUAL_HOST=gitlab.loc
      - VIRTUAL_PORT=80
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /srv/backups/gitlab:/backups
      - /var/test/gitlab/home:/home/git/data

  redis:
    image: sameersbn/redis:latest
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro

问题根源

Docker Compose v1的links选项会自动把链接容器的环境变量注入到当前容器,同时添加主机名映射;而v2的links仅做主机名映射,默认不再传递环境变量。你移除links后没有手动补充数据库和Redis的连接配置,导致GitLab无法获取数据库的认证信息,启动失败。

修复方案

方案1:手动添加数据库和Redis连接环境变量

在v2的gitlab服务的environment中补充以下配置,明确指定数据库和Redis的连接信息:

- DB_HOST=postgresql
- DB_USER=gitlab
- DB_PASS=mypassword
- DB_NAME=gitlabhq_production
- REDIS_HOST=redis

同时添加depends_on确保服务启动顺序:

depends_on:
  - postgresql
  - redis

方案2:保留links映射(兼容v2)

如果你想沿用原来的主机名(比如Redis用redisio),可以在gitlab服务中重新添加links,并配合depends_on:

links:
  - redis:redisio
  - postgresql:postgresql
depends_on:
  - postgresql
  - redis

这样GitLab可以通过原来的主机名连接数据库和Redis,无需修改连接变量。

修改后的完整v2配置(方案1示例)

version: "2.3"
services:
  postgresql:
    image: sameersbn/postgresql:12-20200524
    restart: unless-stopped
    environment:
      - DB_USER=gitlab
      - DB_PASS=mypassword
      - DB_NAME=gitlabhq_production
      - DB_EXTENSION=pg_trgm,btree_gist
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/test/gitlab/postgresql_lib:/var/lib/postgresql
      - /var/test/gitlab/postgresql_run:/run/postgresql
  gitlab:
    image: sameersbn/gitlab:13.12.4
    restart: unless-stopped
    ports:
      - "22:22"
    environment:
      - GITLAB_BACKUP_DIR=/backups
      - GITLAB_HOST=gitlab.loc
      - GITLAB_PORT=80
      - GITLAB_SSH_PORT=22
      - GITLAB_SECRETS_DB_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
      - GITLAB_SECRETS_SECRET_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
      - GITLAB_SECRETS_OTP_KEY_BASE=Secretxxxxxxxxxxxxxxxxxxxxxxxxxxx
      - GITLAB_EMAIL=gitlab@test.com
      - GITLAB_EMAIL_REPLY_TO=gitlab@test.com
      - GITLAB_TIMEZONE=Paris
      - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
      - GITLAB_NOTIFY_PUSHER=true
      - VIRTUAL_HOST=gitlab.loc
      - VIRTUAL_PORT=80
      # 新增数据库连接配置
      - DB_HOST=postgresql
      - DB_USER=gitlab
      - DB_PASS=mypassword
      - DB_NAME=gitlabhq_production
      # 新增Redis连接配置
      - REDIS_HOST=redis
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /srv/backups/gitlab:/backups
      - /var/test/gitlab/home:/home/git/data
    depends_on:
      - postgresql
      - redis
  redis:
    image: sameersbn/redis:latest
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:22:36