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
相关产品推荐
相关产品推荐

