如何使用 .env 参数化 dockerfile?

How to parameterize dockerfile with .env?

This 没有解决我的问题,因为我没有转义问题。

我有一个rabbit.env:

NETWORK_NAME=uv_atp_network

和一个 dockerfile

version: '2.3'
networks:
  atp:
    name: $NETWORK_NAME
    external: true
services:
    rabbitmq_local:
        image: 'rabbitmq:3.6-management-alpine'
        ports:
          - '5672:5672'
          - '15672:15672'
        networks:
          - $NETWORK_NAME

两者在同一个文件夹中。

当运行

@pytest.mark.usefixtures("network",)
def test_rabbit_up(client, session_scoped_container_getter):
    pass

调用 docker-compose up behind the scenes,我得到

Service "rabbitmq_local" uses an undefined network ""

我做错了什么?

在 Compose 文件中,您已将网络命名为 atp

networks:
  atp: # <-- you need this name
    settings: don't matter to this naming question

因此在容器定义中引用它时需要使用该名称

services:
  rabbitmq_local:
    networks:
      - atp # <-- the Compose file name of the network

由于此名称是 Compose 文件的本地名称,您可以选择任何您想要的名称。特别是,您可以将网络命名为 default,其中 reconfigures the default network Compose creates;如果你这样做,你不需要为个别服务提及它。

networks:
  default: { external: true, name: $NETWORK_NAME }
services:
  rabbitmq_local:
    # no networks:, Compose will provide `networks: [default]` for you