![将 Docker 设置为使用手动创建的网桥后,Docker 容器失去 Internet 访问](https://linux22.com/image/780524/%E5%B0%86%20Docker%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%E4%BD%BF%E7%94%A8%E6%89%8B%E5%8A%A8%E5%88%9B%E5%BB%BA%E7%9A%84%E7%BD%91%E6%A1%A5%E5%90%8E%EF%BC%8CDocker%20%E5%AE%B9%E5%99%A8%E5%A4%B1%E5%8E%BB%20Internet%20%E8%AE%BF%E9%97%AE.png)
我需要 QEMU/KVM 虚拟机的桥接网络。但是,如果我只安装 Docker,虚拟机就会失去 Internet 访问权限。我找到的解决方案是通过编辑让 Docker 使用现有的桥接/etc/docker/daemon.json
。但是,Docker 容器似乎失去了 Internet 访问权限。如何让 Docker 容器可以访问 Internet?
以下是我在 VirtualBox 中重现该问题的具体步骤。
- 安装 Manjaro 并更新所有内容。
- 安装并启动 Docker
- 创建 Ubuntu 容器并打开其 shell
- 通过发出“apt update”来验证其互联网访问是否正常。
- 创建桥接网络并向其添加以太网连接。
- 删除现有的
docker0
和Wired connection1
。 /etc/docker/daemon.json
用 进行创建{"bridge": "bridge0"}
。- 重启
- 删除现有容器并重新创建 Ubuntu 容器
- 打开外壳并输入
apt update
- 容器无法连接到互联网。
如果以上内容不清楚,我已经录制了整个操作,没有进行任何编辑。屏幕录制可在以下位置获取:https://filebin.net/94bjw3b7na8ydkyk
我下载了 nicolaka/netshoot 容器并尝试打印该容器的一些网络信息。它似乎有一个错误的 IP 192.168.0.1。这是路由器的 IP,所以我认为它不可能有这个 IP。以下是输出:
配置文件
eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:00:01
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:227 errors:0 dropped:0 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12392 (12.1 KiB) TX bytes:986 (986.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:592 (592.0 B) TX bytes:592 (592.0 B)
知识产权
default via 192.168.0.214 dev eth0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.1
IP 地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:00:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.0.1/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
这是ip addr
主机(Docker 容器正在运行的虚拟机)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: bridge0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 3a:ac:8e:f2:ec:ac brd ff:ff:ff:ff:ff:ff
3: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:68:bd:fa brd ff:ff:ff:ff:ff:ff
altname enp2s0
inet 192.168.0.148/24 brd 192.168.0.255 scope global dynamic noprefixroute ens32
valid_lft 43179sec preferred_lft 43179sec
inet6 fd1b:715e:43ca::33b/128 scope global dynamic noprefixroute
valid_lft 43181sec preferred_lft 43181sec
inet6 fd1b:715e:43ca:0:e14d:c46:1e9d:806a/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::23b0:d83c:a70d:3800/64 scope link noprefixroute
valid_lft forever preferred_lft forever
这是ip r
主机
default via 192.168.0.1 dev ens32 proto dhcp src 192.168.0.148 metric 100
192.168.0.0/24 dev bridge0 proto kernel scope link src 192.168.0.214
192.168.0.0/24 dev ens32 proto kernel scope link src 192.168.0.148 metric 100