docker 镜像的 DNS 问题

Zee*_*lal 5 dns docker

我在我的 Ubuntu 主机中使用 docker,并想用一些开发包构建一个服装镜像。

我什么时候跑

docker run -it ubuntu apt-get update
Run Code Online (Sandbox Code Playgroud)

它不解析主机并在错误日志下方抛出

Err:1 http://archive.ubuntu.com/ubuntu xenial InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Reading package lists... Done        
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Run Code Online (Sandbox Code Playgroud)

输出的docker run -it ubuntu more /etc/resolv.conf

search company.com
nameserver 8.8.8.8
nameserver 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

注意:company.com 是我的组织域

输出docker network inspect bridge

[
    {
        "Name": "bridge",
        "Id": "ee1a3e8cac6fdc0be630ae027957345b63977b6bb74cec04a9200f1ad8f895f7",
        "Created": "2017-02-09T21:46:05.235449663+05:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
Run Code Online (Sandbox Code Playgroud)

小智 8

对我有用的是指南。

来自/sf/answers/2836188211/(YOUR_DNS_IP_HERE是我的补充)

把它放在 /etc/docker/daemon.json 中:

{                                                                     
    "dns": ["YOUR_DNS_IP_HERE", "YOUR_DNS_IP_HERE"]   
}
Run Code Online (Sandbox Code Playgroud)

从 root 退出:

 exit
Run Code Online (Sandbox Code Playgroud)

现在重启docker:

sudo service docker restart
Run Code Online (Sandbox Code Playgroud)

确认:

现在检查添加 /etc/docker/daemon.json 文件是否允许您将“google.com”解析为 IP 地址:

docker run busybox nslookup google.com
Run Code Online (Sandbox Code Playgroud)