13

今天刚刚使用他们的安装指南安装了 docker 1.10.1。--net=host但是,除非我在docker run命令中使用,否则我的容器都不能访问互联网。我从这些帖子中尝试了各种解决方法:

  1. http://odino.org/cannot-connect-to-the-internet-from-your-docker-containers/
  2. 我的 docker 容器没有互联网
  3. 我无法让 Docker 容器访问互联网?
  4. Docker 容器无法访问互联网

到目前为止,除了添加--net=host到运行命令外,没有任何效果,但我无法从 Dockerfile 构建图像,因为我不能--net=host与该build命令一起使用。

我跑去docker network inspect bridge检查 docker 网桥的设置,发现它使用(几乎)与我的工作 VPN 相同的子网和网关。这会导致问题吗?这也可以解释为什么当我连接到我的工作 VPN 时,有些网站没有加载。

这是结果docker network inspect bridge

[
    {
        "Name": "bridge",
        "Id": "6d603ebd1c437d0d1f02be8406cf362f7f36d33168e42b9883891bae99834fa9",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "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"
        }
    }
]

这是 ifconfig:

docker0   Link encap:Ethernet  HWaddr 02:42:9a:29:4a:c2  
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:9aff:fe29:4ac2/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:36 errors:0 dropped:0 overruns:0 frame:0
          TX packets:55 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2080 (2.0 KB)  TX bytes:8498 (8.4 KB)

enx00e09f0004bd Link encap:Ethernet  HWaddr 00:e0:9f:00:04:bd  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:70948 errors:0 dropped:1 overruns:0 frame:0
          TX packets:14839 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14270948 (14.2 MB)  TX bytes:3460691 (3.4 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:3407 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3407 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:326405 (326.4 KB)  TX bytes:326405 (326.4 KB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:172.17.62.55  P-t-P:172.17.62.55  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1406  Metric:1
          RX packets:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:1773 (1.7 KB)  TX bytes:1466 (1.4 KB)

wlp6s0    Link encap:Ethernet  HWaddr cc:3d:82:1a:1e:1d  
          inet addr:10.250.9.73  Bcast:10.250.9.255  Mask:255.255.254.0
          inet6 addr: fe80::ce3d:82ff:fe1a:1e1d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4381 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4398 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2246805 (2.2 MB)  TX bytes:835572 (835.5 KB)
4

4 回答 4

5

我无法从 Dockerfile 构建映像,因为我无法将 --net=host 与构建命令一起使用

这是 docker 守护进程在构建时能够访问互联网的工作。

您可以通过传递构建时参数来帮助它

docker build --build-arg HTTP_PROXY=http://...

也就是说,如果您在代理后面。
如果不是,请检查您的 DNS 设置(该问题在 boot2docker 的上下文中,在这里可能与您无关,但它仍然可以提供一些关于检查内容的线索)。
这是另一个 DNS 问题的例子

OP Wheeler评论中确认了一个与 dns 相关的问题:

我不得不禁用dnsmasqin NetworkManager,不太清楚为什么它会影响 docker,但是当我禁用 dnsmasq 时,DNS 解析开始在容器内工作。

这是在此之前看到的解决方法:

  • dns=dnsmasq通过在“ ”行中注释掉 dnsmasq/etc/NetworkManager/NetworkManager.conf并重新启动网络管理器和 docker.io 服务(sudo service network-manager restart && sudo service docker.io restart)来禁用 dnsmasq。
  • 或者启用注释掉的DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"/etc/default/docker.io(并重新启动 docker.io 服务)。

后一种解决方法当然需要能够从您的网络访问 8.8.8.8 / 8.8.4.4 服务器。


OP补充说:

这个解决方案在某种程度上有效,直到我使用我的 VPN 在家工作,并且 docker 网桥的子网与我的 VPN 子网发生冲突。

他推荐“使用 Systemd 设置 Docker 网桥的 ip

/etc/systemd/system/docker.service.d/docker.conf应该包含这个:

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --bip=192.168.169.1/24

和:

systemctl stop docker

# We need a program called brctl to, well, control the bridge, which is part of the bridge-utils package.
sudo apt-get install bridge-utils

#Bring down the docker0 interface:
sudo ip link set docker0 down

# And delete the bridge.
sudo brctl delbr docker0

# Finally, start the Docker daemon
systemctl start docker
于 2016-02-20T06:24:16.520 回答
1

我在 Ubuntu 16.04 上遇到了这个问题 这是通过编辑NetworkManager.conf解决的问题

sudo nano /etc/NetworkManager/NetworkManager.conf

注释掉dns=dnsmasq然后重启 NetworkManager

sudo service network-manager restart

完毕!

于 2017-10-19T15:32:38.067 回答
0

在 RHEL、CentOS 或 Fedora 上,编辑Docker 主机上的<interface>.network文件(例如:)并在 [Network] 部分中添加以下块。/usr/lib/systemd/network//usr/lib/systemd/network/80-container-host0.network

[Network]
...
IPForward=true

就我而言,我添加IPForward=ipv4到 /etc/systemd/network/XX-eth0.network 并解决了问题

请注意

sysctl -w net.ipv4.ip_forward=1

没有为我解决这个问题,只有更改主机上的网络接口才有结果

https://docs.docker.com/engine/install/linux-postinstall/#ip-forwarding-problems

于 2020-11-11T20:19:56.080 回答
0

对我来说,问题是 QEMU 安装弄乱了到主机的桥接,这可能与这个问题有关。

为了解决这个问题,我删除了 QEMU 和 libvirt:

sudo apt-get purge qemu qemu-block-extra qemu-slof qemu-system qemu-system-arm qemu-system-common qemu-system-mips qemu-system-misc qemu-system-ppc qemu-system-sparc qemu-system-x86 qemu-user qemu-user-binfmt qemu-utils libvirt-bin libvirt-daemon libvirt0:amd64.

于 2021-07-21T13:29:36.253 回答