Docker Compose: 增加环境变量

Docker Compose: Increment environment variable

我正在通过 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 中实现这一点?

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

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

然后你这样使用:

ports:
 - "$PORT_INC:4200"

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