0

Docker-Compose の実験的な --x-networking 機能を使用してプロジェクトをセットアップしましたが、compose が作成するプライベート ネットワークでの DNS ルックアップに関する奇妙な問題に遭遇しています。

ping や ip コマンドを実行したり、/etc/hosts を見たりすると、すべてが期待どおりに表示されます。しかし、DNS ルックアップを行うツール (起動時の Varnish や Dig など) は、奇妙な結果を返します。

/etc/hosts から値を返すのではなく、IP アドレスのペアを返していますが、どちらも実際のものではありません。

Mac OS X で docker-compose バージョン 1.5.2、ビルド 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

これら 2 つの IP アドレスは、私が知る限り、何の関係もありません。実際には機能しません。また、私が掘ったすべてのホストは、同じ 2 つの A レコードを取得します。

そしてトリックは、Varnish が起動しないということです。なぜなら、Varnish は 1 回限りの DNS ルックアップを実行し、バックエンドの 2 つの (偽の) アドレスを見つけるからです。

ここで何が起こっているのか推測できますか?

乾杯!

4

1 に答える 1

0

最初に 127.0.0.1 を使用するように DNS を明示的に設定することで、これを機能させることができました。また、「volumes_from」のトリックを使用して、ニスがバックエンドの後に開始されるようにする必要がありました。理想的には、compose の将来のバージョンでは、「link」が廃止されたため、「depends_on」のようなものがあるでしょう。

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
于 2015-12-31T16:39:40.373 に答える