使用 docker-compose 回退环境变量
Fallback for environment variables with docker-compose
给定以下配置:
mysql:
environment:
MY_MYSQL_PORT:
image: mysql
ports:
- "${MY_MYSQL_PORT}:3306"
有没有一种方法可以在不依赖包装脚本的情况下为 MY_MYSQL_PORT 提供备用值?我已经像 bash ${MY_MYSQL_PORT-3306} 这样测试了,但它不起作用。
他们在 compose 1.9 版本中实现了该功能:
Added support for shell-style inline defaults in variable interpolation.
The supported forms are ${FOO-default} (fall back if FOO is unset) and ${FOO:-default} (fall back if FOO is unset or empty).
可以在以下位置找到 Dockerfile 文档中的解释:
https://docs.docker.com/engine/reference/builder/#environment-replacement
从那里引用:
${variable_name}
语法还支持下面指定的一些标准 bash 修饰符:
${variable:-word}
表示如果设置了 variable
则结果将是该值。如果未设置 variable
,则结果为 word
。
${variable:+word}
表示如果设置了variable
则结果为word
,否则为空字符串
在所有情况下,word 可以是任何字符串,包括额外的环境变量。
可以通过在变量前添加 \
来进行转义:例如,$foo
或 ${foo}
将分别转换为 $foo 和 ${foo} 文字。
给定以下配置:
mysql:
environment:
MY_MYSQL_PORT:
image: mysql
ports:
- "${MY_MYSQL_PORT}:3306"
有没有一种方法可以在不依赖包装脚本的情况下为 MY_MYSQL_PORT 提供备用值?我已经像 bash ${MY_MYSQL_PORT-3306} 这样测试了,但它不起作用。
他们在 compose 1.9 版本中实现了该功能:
Added support for shell-style inline defaults in variable interpolation.
The supported forms are ${FOO-default} (fall back if FOO is unset) and ${FOO:-default} (fall back if FOO is unset or empty).
可以在以下位置找到 Dockerfile 文档中的解释: https://docs.docker.com/engine/reference/builder/#environment-replacement
从那里引用:
${variable_name}
语法还支持下面指定的一些标准 bash 修饰符:
${variable:-word}
表示如果设置了variable
则结果将是该值。如果未设置variable
,则结果为word
。${variable:+word}
表示如果设置了variable
则结果为word
,否则为空字符串
在所有情况下,word 可以是任何字符串,包括额外的环境变量。
可以通过在变量前添加 \
来进行转义:例如,$foo
或 ${foo}
将分别转换为 $foo 和 ${foo} 文字。