Docker compose 如何在docker compose文件中自定义网络名称

Docker compose 如何在docker compose文件中自定义网络名称,docker-compose,Docker Compose,我无法在网络下使用$FOO_NETWORK,即它只允许输入值而不允许输入环境变量。如何自定义要从环境变量中获取的网络名称而不是环境变量用于值,您希望将其用于键。据我所知,这还没有得到支持,我也不确定它是否会得到支持 一种定制方法是使用多个docker compose文件。创建三个文件: one.yml: 版本:“3.0” 服务: 测试: 图片:nginx two.yml: 版本:“3.0” 服务: 测试: 网络: foo:{} 网络: foo:{} 3.yml: 版本:“3.0” 服务: 测

我无法在网络下使用$FOO_NETWORK,即它只允许输入值而不允许输入环境变量。如何自定义要从环境变量中获取的网络名称而不是

环境变量用于值,您希望将其用于键。据我所知,这还没有得到支持,我也不确定它是否会得到支持

一种定制方法是使用多个docker compose文件。创建三个文件:

one.yml

版本:“3.0”
服务:
测试:
图片:nginx
two.yml

版本:“3.0”
服务:
测试:
网络:
foo:{}
网络:
foo:{}
3.yml

版本:“3.0”
服务:
测试:
网络:
条:{}
网络:
条:{}
现在,如果您按如下方式运行它:

docker compose-f one.yml-f two.yml up
或者像这样:

docker compose-f one.yml-f three.yml up
您将看到这些文件被合并:

    version: '3.8'
    
    services:
      foo:
        ...
        networks:
          - $FOO_NETWORK

networks:
  foo_network:
您甚至可以同时旋转所有三个:

Creating network "network_foo" with the default driver
Recreating network_test_1 ... done
...
Creating network "network_bar" with the default driver
Recreating network_test_1 ... done
查看文档了解更多信息:

还有另一种方法,实际上是使用变量来选择网络。方法是使用现有网络。您需要一个
.env
文件来执行以下操作:

docker-compose -f one.yml -f two.yml -f three.yml up
Creating network "network_foo" with the default driver
Creating network "network_bar" with the default driver
Creating network_test_1 ... done
Attaching to network_test_1
test_1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
在“撰写文件”中,您可以执行以下操作:

版本:“3.8”
服务:
测试:
网络:
mynet:{}
网络:
mynet:
外部:正确
名称:$network

如您所见,在使用外部网络时,可以选择提供
名称
。启动容器时,必须存在名为
的网络,否则会出错。您可以使用单独的文件在节点上创建网络,也可以仅使用CLI创建网络。请注意,compose版本已更改,“3.0”中不支持该功能。

请参阅。您可以在与
docker compose.yml
文件相同的级别创建
.env
文件,然后在运行命令时指定该文件,示例:
docker compose--env file./config/.env.dev up
网络部分下的foo_网络:不可自定义,因此问题指定:
使用此配置运行docker compose up时,compose在shell中查找环境变量,并在中替换其值。
所以我不知道,是否要计算环境变量或采用docker compose.yml中指定的网络名称?如果查看网络底部的语法:它被称为foo_网络:因此我不能将其替换为$foo_网络:这不起作用如果可以用变量替换网络,我找不到任何信息钥匙也许作为一种解决方法,您可以单独创建一个网络,然后在
docker compose.yml
中以其名称将其称为外部网络?
network=my_network