我使用Docker-Compose的实验性-x-networking功能设置了一个项目,我正在编写创建的专用网络上的DNS查找的奇怪问题。
当我执行ping或ip命令,或者查看/ etc / hosts时,我会看到所有内容。但是,进行DNS查找的工具(例如启动时的清漆或挖掘)会返回奇怪的结果。
它们不是从/ etc / hosts返回值,而是返回一个IP地址的PAIR,这两个都不是实际的。
我正在运行docker-compose版本1.5.2,在Mac OS X上构建7240ff3。
这是我的docker-compose.yml:
redis:
image: redis
container_name: my_redis
db:
image: postgres
container_name: my_postgres
nginx:
image: nginx
container_name: my_nginx
volumes:
- .:/code
- ./devscripts/docker-compose/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- 8080
uwsgi:
build: .
container_name: my_uwsgi
environment:
DJANGO_SETTINGS_MODULE: 'my.settings_docker_compose'
command: uwsgi --yaml=devscripts/docker-compose/uwsgi-compose.yml
volumes:
- .:/code
ports:
- 7000
varnish:
image: million12/varnish
container_name: my_varnish
environment:
VARNISHD_PARAMS: -a :8000
ports:
- 8000:8000
volumes:
- ./devscripts/docker-compose/varnish.vcl:/etc/varnish/default.vcl:ro
来自my_varnish容器,/ etc / hosts:
[root@61bcb46ba4a2 /]# cat /etc/hosts
172.18.0.3 61bcb46ba4a2
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.4 my_redis
172.18.0.6 my_nginx
172.18.0.2 my_postgres
172.18.0.2 my_postgres.my
172.18.0.4 my_redis.my
172.18.0.5 my_uwsgi
172.18.0.5 my_uwsgi.my
172.18.0.6 my_nginx.my
这是Dig输出(CentOS 7图像):
[root@61bcb46ba4a2 /]# dig my_nginx
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.1 <<>> my-nginx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47196
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;my_nginx. IN A
;; ANSWER SECTION:
my_nginx. 10 IN A 198.105.244.23
my_nginx. 10 IN A 198.105.254.23
;; Query time: 56 msec
;; SERVER: 205.171.2.25#53(205.171.2.25)
;; WHEN: Thu Dec 31 01:11:33 UTC 2015
;; MSG SIZE rcvd: 66
据我所知,这两个IP地址与任何事情无关,它们实际上并不起作用。此外,我挖掘的每个主机都会获得相同的两个A记录。
诀窍是Varnish不会启动,因为它进行一次性DNS查找并找到后端的两个(虚假)地址。
对此处可能发生的事情有什么猜测?
干杯!
答案 0 :(得分:0)
我能够通过明确地将DNS设置为首先使用127.0.0.1来实现此功能。然后我也不得不使用&#39; volumes_from&#39;确保清漆在它的后端之后开始。理想情况下,在未来的compose版本中,会出现类似&#34; depends_on&#34;,因为&#34; link&#34;已被弃用。
varnish:
image: million12/varnish
container_name: my_varnish
environment:
VARNISHD_PARAMS: -a :8000
dns:
- 127.0.0.1
- 8.8.8.8
ports:
- 8000:8000
volumes:
- ./devscripts/docker-compose/varnish.vcl:/etc/varnish/default.vcl:ro
volumes_from:
- uwsgi
- nginx