docker compose文件参考(4) – 变量替换

配置项可以包含环境变量。compose使用docker-compose运行所在的shell环境的变量值。例如,假设shell包含环境变量EXTERNAL_PORT=8000且配置中引用了此变量:

  1. web:
  2.   build: .
  3.   ports:
  4.     - "${EXTERNAL_PORT}:5000"

当使用此配置插docker-compose run命令时,compose在shell中查找EXTERNAL_PORT环境变量并使用其值替换此配置文件中对应的占位符。在这个示例中,在创建web容器之前,compose解析端口映射为8000:5000。

如果环境变量没有设置,compose使用空字符替换。在上面的示例中,如果EXTERNAL_PORT没有设置,端口映射的值为:5000(是一个无效的端口映射,创建容器时会导致错误)。

可以使用.env文件为环境变量设置默认的值。在shell环境中设置的值会覆盖在.env文件设置的值。

  1. $ unset EXTERNAL_PORT
  2. $ echo "EXTERNAL_PORT=6000" > .env
  3. $ docker-compose up          # EXTERNAL_PORT will be 6000
  4. $ export EXTERNAL_PORT=7000
  5. $ docker-compose up          # EXTERNAL_PORT will be 7000

$VARIABLE和${VARIABLE}两种写法都支持。如果使用的是2.1文件格式,还可以在一行中设置默认的值:

  • ${VARIABLE:-default}:当VARIABLE没有设置或为空值时使用default值。
  • ${VARIABLE-default} :仅当VARIABLE没有设置时使用default值。
  • 其它的shell风格的扩展功能,如${VARIABLE/foo/bar}不支持。

    可以使用双美元符号来转义美元符号,即阻止compose解析为值。

    1. web:
    2.   build: .
    3.   command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
    标签:Docker 发布于:2019-11-19 01:00:37