码头工人:如何控制/定义默认的网关设置

问题描述:

任何人都可以阐明一下Docker Compose YML文件是什么? 我想要做的就是能够控制各种容器的IP地址。我正在使用3.1版本(但也尝试3.3,因为我最近升级到版本17.06)。该文档说:码头工人:如何控制/定义默认的网关设置

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中失去了能力(时刻)的某些功能在版本2中有效?更糟糕的是,为什么没有在3.2或3.3版本中恢复?

也许我在这里的基地 - 肯定不会是第一次!对我来说最重要的是:是否有办法修改组合文件以允许docker stack deploy命令(在Docker Swarm中)提供对使用的网关和子网的控制?撰写V3内的网络

终于明白了这一点,我发布了我所做的,希望它可以帮助p别人。虽然当我开始时我不知道这一点,但我真正想要的是什么? :)]要做的是重新定义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 

现在所有的容器上使用您指定的网关所定义的子网,也可以开始。

配置为:

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 
+0

是的,我试图暗示这是'荣幸',但容器无法启动,因为您也没有显示的网关被设置为默认值,比如172.18.1.1 – JoeG

+0

您可以随时创建网络你自己,'码头网络创建 - 网关“任何”'并将你的容器附加到它 – Rawkode

+0

试图,然后码头堆栈部署失败,因为该网络已经存在。 Ick .... – JoeG