2017-08-22 50 views
0

我创建使用此命令覆盖网络:搬运工堆栈部署不使用覆盖网络创建

docker network create --driver overlay --internal --subnet 192.168.0.0/24 test 

,然后我试图与一个服务部署堆栈。堆栈的YAML文件看起来像:

--- 
version: "3.0" 
services: 
    web1: 
    image: "test" 
    ports: 
     - "12023:22" 
    hostname: "ard014-web1" 
    networks: 
     - test 
networks: 
    test: 
    driver: overlay 

我用命令部署堆栈:

docker stack deploy -c test.yaml test 

,如果我请与搬运工人网络LS我找到新的覆盖网络获取与名称test_test和创建的网络容器使用此网络而不是已经创建的网络。这是预期的行为?我希望堆栈使用手动创建的网络,而不是创建新网络,因为我想控制覆盖网络使用的IP CIDR范围。我怎么能做到这一点?

回答

2

要使用现有的网络,把它定义为“外部”:

version: "3.0" 
services: 
    web1: 
    image: "test" 
    ports: 
     - "12023:22" 
    hostname: "ard014-web1" 
    networks: 
     - test 
networks: 
    test: 
    external: 
     name: test 

更多细节在这里:https://docs.docker.com/compose/compose-file/#external-1

+0

感谢@BMitch你的答案工作就像一个魅力:) – tkyass

+0

我注意到,我可以使用这在已经被创建用于改变它的网络的容器上。我收到了错误消息:“来自守护程序的错误响应:rpc错误:代码= 2 desc =不支持更改服务中的网络” – tkyass

+0

@tkyass有技术原因,或许服务VIP不能使用滚动升级。解决方法是在进行像这样的更改时删除现有服务。 – BMitch