使用 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).

Release Notes Docker Compose 1.9

可以在以下位置找到 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} 文字。