【问题标题】:Centos 7.9 - Docker container can't access internetCentos 7.9 - Docker 容器无法访问互联网
【发布时间】:2021-06-29 18:56:13
【问题描述】:

我目前有一个正在运行的 docker 堆栈,服务能够通过桥接网络相互通信。

即使入站连接有效(互联网 --> 容器),出站连接也不能:我无法从这些容器中向互联网 wget;curl;etc。

我的主机在 Centos 上运行,鉴于网上与此类问题相关的帖子数量,我禁用了 firewalld 以检查是否是问题:不是。

CentOS Linux 版本 7.9.2009

Docker 版本 1.13.1,构建 0be3e21/1.13.1

docker-compose 版本 1.28.5,构建 c4eb3a1f

networks:
    mynetwork:
        driver: bridge

 "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
        "Driver": "default",
        "Options": null,
        "Config": [
            {
                "Subnet": "172.19.0.0/16",
                "Gateway": "172.19.0.1"
            }
        ]
    },
    "Internal": false,
    "Attachable": true,
    "Containers": {
        [...]
    },
    "Options": {},
    "Labels": {
        "com.docker.compose.network": "mynetwork",
        "com.docker.compose.project": "myproject",
        "com.docker.compose.version": "1.28.5"
    }

带有网址的卷曲:

curl www.tester.com
curl: (6) Could not resolve host: www.tester.com

Curl 可以使用 IP。

这似乎与DNS有关,但我缺乏这方面的知识。如何调整我的配置以授予我的容器访问互联网的权限? (不设置网络:host)

编辑

将 DNS 设置到 docker-compose 文件中效果很好。感谢@atline 的领导!

dns:
    - 8.8.8.8
dns_search:
    - domain.name

对于那些尽管将 DNS 设置为 docker 设置文件(daemon / docker.service / ...)但仍有类似问题的人,看起来 docker-compose 不使用 Docker“自定义”默认值;所以直接使用docker-compose

【问题讨论】:

    标签: docker networking docker-compose


    【解决方案1】:

    您可以通过多种方式为容器配置 dns:

    1.运行容器时添加 dns:

    docker run --dns 192.168.1.1 busybox nslookup google.com
    

    2。配置/etc/docker/daemon.json为所有容器设置默认dns:

    {
        "dns": ["192.168.1.1", "8.8.8.8"]
    }
    

    然后,sudo service docker restart 使其生效。

    3.更改 systemd 脚本 /lib/systemd/system/docker.service 以包含 --dns

    [Service]
    ExecStart=/usr/bin/dockerd --dns 192.168.1.1 -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
    

    然后重启docker使其生效:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    sudo systemctl status docker
    

    注意:您应该使用您的真实 dns 替换 192.168.1.1 的值。

    【讨论】:

    • 在 docker-compose.yml 中设置 DNS 可以解决问题,谢谢!在发布此内容之前,我尝试在守护进程中添加 DNS 和 docker?service 文件,但没有成功。也许 docker-compose 不使用 docker 默认值?