Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker:如何控制/定义默认网关设置_Docker_Docker Compose_Docker Swarm_Docker Stack - Fatal编程技术网

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

Docker:如何控制/定义默认网关设置,docker,docker-compose,docker-swarm,docker-stack,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 v

有人能解释一下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中失去了在版本2中工作的功能?更糟糕的是,为什么没有在3.2或3.3版中恢复


也许我在这里太离谱了——这肯定不是第一次!对我来说最重要的是:是否有方法修改compose文件,以允许
docker stack deploy
命令(在
docker Swarm
中)提供对所用网关和子网的控制?

compose 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

最后我终于明白了这一点,我把我所做的事情发布出来,希望它能帮助其他人。虽然我开始时并不知道这一点,但我真正想要[需要:)]做的是重新定义
docker\u 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

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

是的,我试图暗示这是“荣幸”,但容器无法启动,因为网关(您也没有显示)设置为默认值,例如172.18.1.1您始终可以自己创建网络,
docker network create--gateway“随便”
并将容器连接到它,然后docker stack部署失败,因为该网络已经存在。单击。。。。