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

Docker Compose混合配置GITLAB_OMNIBUS_CONFIG与环境变量报错求助

解决Docker Compose中GITLAB_OMNIBUS_CONFIG与大写环境变量混合配置的问题

你遇到的YAML解析错误,根源是在environment字段里同时混用了两种不兼容的语法格式——一部分是键值对(比如GITLAB_OMNIBUS_CONFIG: |),另一部分是数组项(比如- DEBUG=true),YAML不允许在同一个映射(mapping)里同时使用这两种写法。

下面给你两种可行的修正方案,你可以根据习惯选择:

方案一:全部使用键值对格式(推荐)

这种方式可读性更强,尤其适合GITLAB_OMNIBUS_CONFIG这种需要多行配置的场景,用|符号可以完美保留配置的换行结构:

version: '2.2'
services:
  redis:
    restart: always
    image: sameersbn/redis:latest
    command:
      - --loglevel warning
    volumes:
      - /srv/docker/gitlab/redis:/var/lib/redis:Z
  postgresql:
    restart: always
    image: sameersbn/postgresql:latest
    volumes:
      - /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
    environment:
      DB_USER: gitlab
      DB_PASS: password
      DB_NAME: gitlabhq_production
      DB_EXTENSION: pg_trgm
  gitlab:
    restart: always
    image: sameersbn/gitlab:10.3.3
    hostname: 'gitlab.example.com'
    depends_on:
      - redis
      - postgresql
    ports:
      - "30080:30080"
      - "30022:22"
    volumes:
      - /srv/docker/gitlab/gitlab:/home/git/data:Z
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com:30080'
        gitlab_rails['gitlab_shell_ssh_port'] = 30022
      DEBUG: "true"
      DB_ADAPTER: postgresql
      DB_HOST: postgresql
      DB_PORT: "5432"
      DB_USER: gitlab
      DB_PASS: password
      DB_NAME: gitlabhq_production
      REDIS_HOST: redis
      REDIS_PORT: "6379"
      TZ: Europe/Berlin
      GITLAB_TIMEZONE: Berlin

方案二:全部使用数组格式

如果你更习惯数组形式的环境变量写法,需要把GITLAB_OMNIBUS_CONFIG的多行内容合并成一个数组项,注意换行的处理:

version: '2.2'
services:
  redis:
    restart: always
    image: sameersbn/redis:latest
    command:
      - --loglevel warning
    volumes:
      - /srv/docker/gitlab/redis:/var/lib/redis:Z
  postgresql:
    restart: always
    image: sameersbn/postgresql:latest
    volumes:
      - /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
    environment:
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production
      - DB_EXTENSION=pg_trgm
  gitlab:
    restart: always
    image: sameersbn/gitlab:10.3.3
    hostname: 'gitlab.example.com'
    depends_on:
      - redis
      - postgresql
    ports:
      - "30080:30080"
      - "30022:22"
    volumes:
      - /srv/docker/gitlab/gitlab:/home/git/data:Z
    environment:
      - GITLAB_OMNIBUS_CONFIG='external_url "http://gitlab.example.com:30080"
        gitlab_rails["gitlab_shell_ssh_port"] = 30022'
      - DEBUG=true
      - DB_ADAPTER=postgresql
      - DB_HOST=postgresql
      - DB_PORT=5432
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - TZ=Europe/Berlin
      - GITLAB_TIMEZONE=Berlin

补充说明

  • Docker Compose的environment字段只支持二选一的语法:要么全用键值对KEY: VALUE,要么全用数组项- KEY=VALUE,混合使用必然触发YAML解析错误。
  • 对于GITLAB_OMNIBUS_CONFIG这类包含多行Omnibus配置的变量,优先推荐键值对+|的写法,能清晰保留配置的层级和换行,后期维护更方便。
  • 数值类型的变量(比如端口号)用键值对时建议加引号,避免YAML将其解析为数字类型,防止某些场景下的类型转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:47