如何为 docker-compose 参数化端口?

How to parameterize ports for docker-compose?

我正在尝试使用 .env 参数化 docker-compose 文件。 Doc

docker-compose.yml

version: '2.3'
networks:
    default: { external: true, name: $NETWORK_NAME }
services:
    rabbitmq_local:
        image: 'rabbitmq:3.6-management-alpine'
        ports:
          # The standard AMQP protocol port
          - ${RABBIT_PORT}:5672
          # HTTP management UI
          - '15672:15672'

.env 文件

NETWORK_NAME=uv_atp_network
RABBIT_PORT=5672
RABBIT_HTTP_MANAGEMENT_PORT=15672

参数化 NETWORK_NAME 有效,但参数化 RABBIT_PORT 无效,

The Compose file 'docker-compose.yml' is invalid because:
services.rabbitmq_local.ports contains an invalid type, it should be a number, or an object

这让我怀疑 RABBIT_PORT 被解释为字符串而不是数字。

如何正确参数化它?


编辑

我发现强制变量是强制的

- ${RABBIT_PORT:?unspecified_rabbit_port}:5672

给出错误,意味着它未设置或为空。

我做错了什么?

似乎 运行 pytest and pytest-docker-compose.env 文件必须与 pytest.ini 文件一起位于 pytest 的根文件夹中。

运行 from docker-compose from command-line 在 docker 1.24 中没有这个限制。

重定位文件后,可以解析变量。