Dockerコンテナで動くNginxのproxy_passでホストの名前解決をする

openrestyのDockerイメージを作ってプロキシサーバーを作ってみたいと思った。とりあえず proxy_pass でプロキシしよ!

server {
  listen 80;
  location / {
    proxy_pass http://abc.exmaple.com.my_network;
  }
}

ファーw

test_proxy.1.abcdefg@swarm-worker-02    | 2020/02/21 13:21:58 [error] 6#6: *2 no resolver defined to resolve abc.exmaple.com.my_network, client: 10.0.0.2, server: , request: "GET / HTTP/1.1", host: "abc.example.com"

Dockerには内蔵DNSサーバがあるらしく、127.0.0.11:53 で動いているらしいのでそこを指定すれば名前解決ができるようだ

Docker デーモンは内蔵 DNS サーバを動かし、ユーザ定義ネットワーク上でコンテナがサービス・ディスカバリを自動的に行えるようにします。コンテナから名前解決のリクエストがあれば、内部 DNS サーバを第一に使います。リクエストがあっても内部 DNS サーバが名前解決できなければ、外部の DNS サーバにコンテナからのリクエストを転送します。割り当てできるのはコンテナの作成時だけです。内部 DNS サーバが到達可能なのは 127.0.0.11 のみであり、コンテナの resolv.conf に書かれます。ユーザ定義ネットワーク上の内部 DNS サーバに関しては ユーザ定義ネットワーク用の内部 DNS サーバ をご覧ください。

ふむふむなるほどね(分かったつもり)

server {
  listen 80;
  location / {
    resolver 127.0.0.11:53;
    proxy_pass http://abc.exmaple.com.my_network;
  }
}

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA