如果设置了变量,如何配置 docker compose 使用给定的子网,或者如果没有设置变量,则如何选择自身?

问题描述 投票:0回答:2

我的 docker compose 文件中有以下网络配置。

networks:
    default:
        ipam:
            driver: default
            config:
                - subnet: ${DOCKER_SUBNET}

设置

DOCKER_SUBNET
后,将按预期使用该变量中指定的子网。当未设置变量时,我得到:
ERROR: Invalid subnet  : invalid CIDR address:
,因为变量为空(这是完全合理的)。

有没有办法配置 ipam 驱动程序,以便在未设置

DOCKER_SUBNET
变量时,docker-compose 将选择一个可用的子网,就像未给出 ipam 配置时通常所做的那样?

docker environment-variables docker-compose docker-network
2个回答
16
投票
如果您没有为网络提供任何

ipam

 配置,则 
Compose 只会选择可用的子网。 Compose 不具备动态修改配置的高级功能。

您可以在撰写之外做出决定,可以使用多个撰写文件或基于模板的系统,在 shell 或启动

docker-compose
命令的某种其他语言中。

将撰写网络配置与文件中的其余服务配置分开:

docker-compose-net-auto.yml

networks:
  default:

docker-compose-net-subnet.yml

networks:
  default:
    ipam:
      driver: default
      config:
        - subnet: ${DOCKER_SUBNET}

然后创建一个脚本

launch.sh
来选择要包含哪个网络文件。

#!/bin/sh
if [ -z "$DOCKER_SUBNET" ]; then
  docker-compose -f docker-compose.yml -f docker-compose-net-auto.yml up
else
  docker-compose -f docker-compose.yml -f docker-compose-net-subnet.yml up
fi

11
投票
networks:
  Mynetwork:
      driver: bridge
      ipam:
          driver: default
          config:
              - subnet: "192.168.0.0/24"
                gateway: "192.168.0.1"
  #- default:
      #driver: bridge
© www.soinside.com 2019 - 2024. All rights reserved.