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 --name="etc"
, --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
.www
appeared? 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
--hostname
parameter? - If the containers can be reached reliably via their name, is it ok not to explicitly set containers’ IP addresses?