我从docker 文档中了解到,如果不使用用户定义的桥接网络,我无法使用 docker DNS 来使用主机名查找容器。我使用以下命令创建了一个:
docker network create --driver=overlay --subnet=172.22.0.0/16 --gateway=172.22.0.1 user_defined_overlay
并尝试部署一个使用它的容器。撰写文件看起来像:
version: "3.0"
services:
web1:
image: "test"
ports:
- "12023:22"
hostname: "mytest-web1"
networks:
- test
web2:
image: "test"
ports:
- "12024:22"
hostname: "mytest-web2"
networks:
- test
networks:
test:
external:
name: user_defined_overlay
我的 docker 版本是:Docker version 17.06.2-ce, build cec0b72
当我尝试部署堆栈时出现以下错误:
network "user_defined_bridge" is declared as external, but it is not in the right scope: "local" instead of "swarm"
我能够创建一个覆盖网络并在撰写文件中定义它。效果很好,但不适用于桥接。docker network ls 的结果:
NETWORK ID NAME DRIVER SCOPE
cd6c1e05fca1 bridge bridge local
f0df22fb157a docker_gwbridge bridge local
786416ba8d7f host host local
cuhjxyi98x15 ingress overlay swarm
531b858419ba none null local
15f7e38081eb user_defined_overlay overlay swarm
更新
我尝试创建在两个不同的 swarm 节点上运行的两个容器(第一个容器在管理器上运行,而第二个在工作节点上运行),我指定了用户定义的覆盖网络,如上面的堆栈所示。我尝试使用主机名从 mytest-web1 容器中 ping mytest-web2 容器,但我得到了unknown host mytest-web2