最近有在使用docker-compose, docker-compose的语法将繁琐的docker run参数放在一个文件里,直接使用docker-compose up -d就按照我们自己定义的一些方式启动一组相关行的容器,十分方便;
但是有个问题一致困扰着我,docker-compose中的一系列服务相互能通过service_name直接调用,它是如何实现的呢?查看/etc/hosts也没有相对应的解析,/etc/resolv.conf
中的记录为127.0.0.11
;
127.0.0.11
不是很常见,何为127.0.0.11
呢?
先来看看Docker Embedded DNS的概念,这个功能在1.10以后添加:
当使用default bridge network的情况下,docker container使用宿主机的resolv.conf。
当使用自定义的docker bridge network后,docker container使用embedded dns, 地址为127.0.0.11
, 容器之间能够通过 vaild name or net-alias or link互相发现(若指定了docker daemon指定了DNS服务器,/etc/reslov.conf乃会是127.0.0.11, 但会把DNS请求转发给指定的DNS服务器);docker-compose默认就采用隔离的network(将compose中的service都放入一组自定义的bridge network),所以docker-compose中的容器就可以通过制定name的方式互相发现对方;