I am setting up a set of containers on a webserver. There’s an Apache http server, nginx http server, MySQL server and Redis server. Plus a container I use to test connectivity from.
I have created a network with
docker network create www --subnet=172.18.0.0/16, and when I run those containers, I do it with the
--network www, and
--ip 172.18.0.n parameters. I have verified that thus the MySQL server is reachable from the Apache server by simply using the MySQL container name instead of IP address.
But when I test this inter-container connectivity from the testing container, using ping, I get strange behavior: the name is appended with “.www”
/# ping mysql PING mysql0 (172.18.0.3) 56(84) bytes of data. 64 bytes from mysql0.www (172.18.0.3): icmp_seq=1 ttl=64 time=0.093 ms 64 bytes from mysql0.www (172.18.0.3): icmp_seq=2 ttl=64 time=0.062 ms # ping Apache2-PHP5.6 PING Apache2-PHP5.6 (172.18.0.2) 56(84) bytes of data. 64 bytes from Apache2-PHP5.6.www (172.18.0.2): icmp_seq=1 ttl=64 time=0.086 ms 64 bytes from Apache2-PHP5.6.www (172.18.0.2): icmp_seq=2 ttl=64 time=0.060 ms
This leads to my questions:
- From where that
.wwwappeared? How exactly this reaching other containers by name work? Is there a DNS hidden in the Docker network?
- Does that put some restrictions on the characters used in the names?
- Is there any relation to the
- If the containers can be reached reliably via their name, is it ok not to explicitly set containers’ IP addresses?