我已经看到了在
docker-compose.yml
文件中设置环境变量的两种方法的多个示例
environment:
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka-server:9000/eureka
或
environment:
- EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://eureka-server:9000/eureka
有正确或错误的方法吗? 应该优先选择哪一个?
有正确还是错误的方法吗?
不,这两种语法都得到完全支持并广泛使用。差异主要在于语法的极端情况。
我建议只选择一个并在单个文件中一致使用它。
地图形式在空白方面更加灵活。我偶尔会在列表语法中看到拼写错误,例如
environment:
- VARIABLE = value
它将名为
VARIABLE
(以空格结尾)的变量设置为 value
(以空格开头)。但是
environment:
LONG_VARIABLE: value
VARIABLE: value
将两者设置为
value
,且没有前导空格。
如果您使用语法从主机或
.env
文件传递变量,并且您仅使用具有外部提供值的变量,则 YAML 内联序列语法可以更加紧凑。
environment: [PGUSER, PGHOST, PGPASSWORD, SECRET]
相反,如果您使用 YAML 锚点来尝试共享值,则需要映射语法。锚点可以应用于映射条目的一半值,但不能应用于单个标量节点值的一半。
services:
database:
environment:
POSTGRES_PASSWORD: passw0rd &pgpasswd
app:
environment:
PGPASSWORD: *pgpasswd
如果您没有犯第一个错误,并且没有使用后两种样式中的任何一种,那么实际上没有任何区别。