私は編集して/etc/resolv.conf
入れたコンテナ1を持っていますnameserver 8.8.8.8
。ping google.com
素晴らしい作品。ただし、次を使用してDockerコンテナを再起動するときは、それを永久に作成する必要があります。
sudo docker restart container1
私のコンテナを介してgoogle.comをpingすることはできません。
メモ:
私は彼らが3-7年前にここに投稿したことを試しました。これはうまくいきません。私のUbuntuのバージョンは18.04です。
答え1
下で述べたようにDNSサービス、コンテナはデフォルトでホストからresolv.confファイルを継承します。
[root@testvm ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
[root@testvm ~]# docker run -it ubuntu bash
root@a0a0d88f6db8:/# mount|grep resolv.conf
/dev/mapper/centos-root on /etc/resolv.conf type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
root@79c567a830b4:/# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
コンテナ内にDNSネームサーバー設定を追加するには、次の2つのオプションがあります。
- ホストのresolv.confファイルにDNSネームサーバーを追加します。
--dns
DNSネームサーバーを明示的に指定する1つ以上のオプションでコンテナを起動します。
--dns
使用しているオプションは次のとおりです。
[root@testvm ~]# docker run -it --dns 8.8.8.8 --dns 8.8.4.4 ubuntu bash
root@3ae155186997:/# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
以下のnginxイメージに示すように、このオプションは再起動後も保持されます。
[root@testvm ~]# docker run -d -p 8080:80 --dns 8.8.8.8 --dns 8.8.4.4 nginx
97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36
[root@testvm ~]# docker exec -it 97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36 bash
root@97f76bedfad8:/# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
root@97f76bedfad8:/# exit
exit
[root@testvm ~]# docker restart 97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36
97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36
[root@testvm ~]# docker exec -it 97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36 bash
root@97f76bedfad8:/# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4