Docker:如何控制/定义默认网关设置

时间:2017-08-10 12:15:30

标签: docker docker-compose docker-swarm docker-stack

任何人都可以了解Docker Compose YML文件的内容吗? 我想要做的就是能够控制各种容器的IP地址。我正在使用3.1版本(但我最近升级到版本17.06也尝试了3.3)。文档说:

A full example:

ipam:
  driver: default
  config:
    - subnet: 172.28.0.0/16
Note: Additional IPAM configurations, such as gateway, are only honored for version 2 at the moment.

当我这样做时,我需要在检查网络时尊重该子网。但是网关完全不同[阅读注意:上面] ,因此容器无法启动。为什么他们在版本3中失去了能力(目前)的功能?更糟糕的是,为什么在版本3.2或3.3中没有恢复?

也许我离这里不远 - 当然不会是第一次!对我来说最重要的是:有没有办法修改撰写文件以允许docker stack deploy命令(在Docker Swarm中)控制所使用的网关和子网?

2 个答案:

答案 0 :(得分:1)

最后想出了这个,我发布了我所做的,希望它可以帮助别人。当我开始时我不知道这一点,我真正想要的是什么? :)]要做的是重新定义docker_gwbridge网络的默认设置。

我就是这样做的:

docker swarm init     # I am assuming this was already done, this creates the network with default settings
docker swarm leave -f  # only if you did an 'init'
docker network ls      # just to see the docker_gwbridge network
docker network rm docker_gwbridge

# if you never created/initialized a swarm, you can start here
SUBNET=172.19.0.0/16   # my defaults were always 172.18, using 19 only to test that this works
GATEWAY=172.19.0.1
docker network create --subnet=$SUBNET --gateway $GATEWAY \
  -o com.docker.network.bridge.name=docker_gwbridge \
  -o com.docker.network.bridge.enable_icc=false \
  -o com.docker.network.bridge.enable_ip_masquerade=true \ 
  docker_gwbridge
docker swarm init      # now start the swarm
docker network inspect docker_gwbridge   # if you want to see your changes
docker stack deploy --compose-file yourFile.yml YOURSTACKNAME

现在,所有容器都从您定义的子网以及使用您指定的网关开始。

答案 1 :(得分:0)

在撰写v3中配置网络是:

networks:
  my_network:
    driver: overlay
    ipam:
      driver: default
      config:
      -
        subnet: 172.28.0.0/16

然后,您可以将容器分配到此网络并指定IP

services
    my_service:
        networks:
            my_network:
                 ipv4_address: 172.28.0.100

对于已定义的网络,请使用:

networks:
  default:
    external:
      name: my-pre-existing-network