Docker Stack部署PostgreSQL容器时添加SSL命令出现YAML语法错误
问题解决:Docker Compose添加SSL命令后YAML语法错误
错误原因
- 缩进不统一:
command字段的缩进与同级的environment、image等字段不一致,YAML对缩进层级要求严格,层级错误会触发解析失败。 - 列表项格式错误:原
command下的参数缩进不正确,且未遵循YAML列表的规范写法,导致解析器无法识别键值对。
修复后的Docker Compose配置
方式一:列表形式(推荐,更清晰)
services: postgres-example-pg-hba: image: mybuild:1 secrets: - pg_password environment: - POSTGRES_DB=mydb - POSTGRES_USER=mysuperuser - POSTGRES_PASSWORD_FILE=/run/secrets/pg_password command: - postgres - -c - ssl=on - -c - ssl_cert_file=/temp/ssl/server.crt - -c - ssl_key_file=/temp/ssl/server.key - -c - ssl_ca_file=/temp/ssl/root.crt build: context: . ports: - "5432:5432" restart: unless-stopped secrets: pg_password: external: true
方式二:字符串形式
services: postgres-example-pg-hba: image: mybuild:1 secrets: - pg_password environment: - POSTGRES_DB=mydb - POSTGRES_USER=mysuperuser - POSTGRES_PASSWORD_FILE=/run/secrets/pg_password command: "postgres -c ssl=on -c ssl_cert_file=/temp/ssl/server.crt -c ssl_key_file=/temp/ssl/server.key -c ssl_ca_file=/temp/ssl/root.crt" build: context: . ports: - "5432:5432" restart: unless-stopped secrets: pg_password: external: true
关键注意点
- 所有同级配置字段必须保持相同缩进(通常为4个空格),禁止混合使用不同数量的空格或制表符。
- 列表形式的
command需将每个命令参数拆分为独立列表项,包括postgres主命令,避免YAML解析时出现歧义。 - 确保容器内
/temp/ssl/路径下存在对应的证书文件(server.crt、server.key、root.crt),否则PostgreSQL启动会失败。
内容的提问来源于stack exchange,提问作者Inspiraller
相关产品推荐
相关产品推荐

