web-dev-qa-db-ja.com

ホストシステムでDNSサーバーを使用するようにdockerに指示する

私はホストでdnsmasqを実行しており、 デフォルトのGoogleサーバー8.8.8.8)の代わりに、Dockerコンテナーにそれを使用させたい

私のホスト/etc/resolv.confは次のようになります。

» cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search mydomain.net

また、コンテナの/etc/resolv.confは次のようになります。

root@ubuntu:/# cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
search mydomain.net

nameserver 8.8.8.8
nameserver 8.8.4.4

Dockerがホストの/etc/resolv.confを再利用しているようですが、127.0.0.1エントリを破棄し、代わりにGoogleのネームサーバーを追加しています。

docker0インターフェイスを参照するdnsエントリを追加してみました。

» ifconfig docker0
docker0   Link encap:Ethernet  HWaddr 02:42:8e:65:b0:88  
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:8eff:fe65:b088/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:55824 errors:0 dropped:0 overruns:0 frame:0
          TX packets:74365 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:15702804 (15.7 MB)  TX bytes:60639605 (60.6 MB)

次のように:

docker run \
    -it \
    --name ubuntu.bionic \
    --restart always \
    --dns 172.17.0.1 \
    ubuntu:bionic

しかし、DNSは機能していません。

root@ubuntu:/# apt-get update
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease        
  Temporary failure resolving 'security.ubuntu.com'

ホストシステムでdnsサーバーを使用するために、どのようにしてdockerコンテナをデル化できますか?

編集

dnsmasqdocker0インターフェースにバインドするように指示する必要があるようです:

listen-address=127.0.0.1,172.17.0.1

docker0インターフェースのIPアドレスtwiceを1回docker runコマンドに対して作成したい各コンテナ、およびdnsmasq構成用。

EDIT2

デフォルトでローカルDNSサーバーを使用するようにdockerに指示できます(これはコンテナーで実行され、docker0インターフェースの他のコンテナーに到達可能:172.17.0.1):

» Sudo cat /etc/docker/daemon.json
{
    "dns": ["172.17.0.1", "8.8.8.8"]
}

次に、Dockerデーモンを再起動します。

Sudo service docker restart

dockerdocker0インターフェースのIPアドレスを変更する可能性があることにまだ少し心配しています。dockerdnsmasqを再構成する必要があります。コンテナを再構築します。

7
dangonfast

ホストのローカルDNSリゾルバー(例:dnsmasq)は、Dockerコンテナーが user defined network 。その場合、コンテナの/etc/resolv.confにはネームサーバーがあります127.0.0.11(別名、Dockerの 組み込みDNSサーバー )。これにより、DNS要求をホストのループバックアドレスに適切に転送できます。

$ cat /etc/resolv.conf
nameserver 127.0.0.1
$ docker run --rm Alpine cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
$ docker network create demo
557079c79ddf6be7d6def935fa0c1c3c8290a0db4649c4679b84f6363e3dd9a0
$ docker run --rm --net demo Alpine cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0    

docker-compose 、サービスのカスタムネットワークを自動的にセットアップします(ファイル形式 v2 + を使用)。ただし、docker-composeは、ユーザー定義のネットワークでコンテナを実行しますが、デフォルトネットワークでコンテナを構築します。ビルドにカスタムネットワークを使用するには、_ ビルド構成networkパラメーターを指定できます(ファイル形式が必要 v3.4 + )。

5
Eugene Yarmash