docker堆栈部署不使用覆盖networking创build

我使用这个命令创build了一个覆盖networking:

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 

如果我使用dockernetworkingls检查networking,我发现新名称为test_test的覆盖networking被创build,容器使用这个networking而不是已经创build的networking。 这是一个预期的行为? 我希望堆栈使用我手动创build的networking,而不是创build新的networking,因为我想控制覆盖networking使用的IP CIDR范围。 我怎么能做到这一点?

要使用现有networking,请将其定义为“外部”:

 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