I learned from docker documentation that I can not use docker DNS to find containers using their hostnames without utilizing user-defined bridge network. I created one using the command:
docker network create --driver=overlay --subnet=172.22.0.0/16 --gateway=172.22.0.1 user_defined_overlay
and tried to deploy a container that uses it. compose file looks like:
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
my docker version is: Docker version 17.06.2-ce, build cec0b72
and I got the following error when I tried deploying the stack:
network "user_defined_bridge" is declared as external, but it is not in the right scope: "local" instead of "swarm"
I was able to create an overlay network and define it in compose file. that worked fine but it didn't for bridge. result of 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
UPDATE
I tried creating two containers running on two different swarm nodes(1st container runs on manager while second runs on worker node) and I specified the user-defined overlay network as shown in stack above. I tried pinging mytest-web2 container from within mytest-web1 container using hostname but I got unknown host mytest-web2