【问题标题】:Docker-Compose Networking - DNS Returns Multiple, Inaccurate IP AddressesDocker-Compose Networking - DNS 返回多个不准确的 IP 地址
【发布时间】:2015-12-31 01:15:26
【问题描述】:

我使用 Docker-Compose 的实验性 --x-networking 功能设置了一个项目,但我在 compose 创建的专用网络上遇到了一个奇怪的 DNS 查找问题。

当我执行 ping 或 ip 命令或查看 /etc/hosts 时,我看到的一切都如我所愿。但是进行 DNS 查找的工具(例如启动时使用 Varnish 或 dig)返回奇怪的结果。

它们不是从 /etc/hosts 返回值,而是返回一对 IP 地址,这两个都不是实际的。

我正在运行 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 查找并为后端找到两个(虚假)地址。

你猜到这里会发生什么吗?

干杯!

【问题讨论】:

    标签: dns docker-compose varnish-4


    【解决方案1】:

    我可以通过明确地将 DNS 设置为首先使用 127.0.0.1 来实现此功能。然后我还不得不使用“volumes_from”的技巧来确保清漆在它的后端之后启动。理想情况下,在将来的 compose 版本中,会有类似“depends_on”的内容,因为“link”已被弃用。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-17
      • 2014-11-03
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      相关资源
      最近更新 更多