【问题标题】:Docker Compose: Increment environment variableDocker Compose:增加环境变量
【发布时间】:2022-01-01 02:33:55
【问题描述】:

我正在通过 Docker Compose 在本地部署一个全栈应用程序,并希望从单个环境变量 $PORT 派生后端和前端端口。例如,如果$PORT = 3000,则后端端口应为3000,前端端口应为3001。如果$PORT = 4000,那么后端端口应该是4000,前端端口应该是4001

为此,我想在我的docker-compose.yml 中做这样的事情:

version: "3"
services:
  backend:
    ...
    ports:
      - "${PORT}:3000"
  frontend:
    ...
    ports:
      - "$((PORT + 1)):4200"

ERROR: Invalid interpolation format for "environment" option in service "frontend" 失败。有没有办法在 Docker Compose 中实现这一点?

【问题讨论】:

  • 如果您使用 swarm 将其作为堆栈运行,您可以使用模板占位符。请参阅docs 和此question。但据我所知,它只适用于 swarm。除此之外,您可以只发布端口而不进行映射。因此,您只需将 4200 指定为端口,而不是端口映射端口:4200。但是,您需要查找它们。

标签: docker-compose environment-variables


【解决方案1】:

我认为这是不可能的。但是你为什么不在你的环境中设置这些端口变量呢?例如在一切之前运行:

export PORT=3000 #or whatever number you want
export PORT_INC=$(($PORT+1))

然后你像这样使用:

ports:
 - "$PORT_INC:4200"

【讨论】:

    【解决方案2】:

    Compose 仅​​支持有限的一组environment variable substitutions${VARIABLE}${VARIABLE:-default}${VARIABLE:?error message},以及后两个不带冒号的选项。您不能在 Compose 中进行其他替换、计算或 shell 标注。

    对于这种特殊情况,您可以让 Docker 为您选择主机端口号。这比您描述的方案更难预测,但它不需要任何特殊设置。不要在ports: 中使用两个数字,只需指定容器端口号

    version: '3.8'
    services:
      backend:
        ports:
          - '3000'
      frontend:
        ports:
          - '4200'
    

    要找到对应的主机端口号,需要运行docker-compose port

    docker-compose port frontend 4200
    

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 1970-01-01
      • 2018-02-03
      • 2019-02-25
      • 2022-06-11
      • 2019-07-26
      • 1970-01-01
      • 2019-01-07
      • 2020-07-16
      相关资源
      最近更新 更多