Docker 本地主机连接被 UFW 阻止
Docker localhost connection blocked by UFW
情况
我正在尝试学习如何在我的本地计算机上使用 docker。本地计算机设置为仅通过 VPN 路由流量。默认的 UFW 策略是 DENY
所有传入和传出流量(通过 VPN 除外)。
问题
当我尝试启动 Docker 容器 docker container run -p 80:80 nginx
时,我无法在我的浏览器中使用本地主机 连接到 nginx 容器。
但是我可以通过telnet连接到本地的nginx容器
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
我知道 UFW 可能导致此问题的原因是一旦我禁用 UFW,我就可以在浏览器中毫无问题地连接到本地主机。
问题
当 UFW 设置为拒绝所有连接时,如何从我的浏览器连接到我的本地 nginx 容器?
我找到了解决问题的方法。
解决方案
ufw allow out on docker0 from 172.17.0.0/16
因为我知道nginx使用的具体端口,我也可以通过
使这个规则更严格
ufw allow out on docker0 from 172.17.0.0/16 port 80 proto tcp
说明
Docker 为容器创建一个新的接口,你可以通过 运行 ifconfig
:
查看
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:a4:5e:e9:9c txqueuelen 0 (Ethernet)
RX packets 87 bytes 17172 (17.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 117 bytes 14956 (14.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此接口通过 172.17.xxx.xxx 路由流量。您可以阅读更多关于我如何找到网络掩码 .
这为我们提供了编写规则所需的所有信息。如果您在不同的端口上发布容器,您可以通过执行以下操作来检查端口号和协议:
- 查找容器的 ID
docker container ls
- 找到容器的端口
docker container port {id}
情况
我正在尝试学习如何在我的本地计算机上使用 docker。本地计算机设置为仅通过 VPN 路由流量。默认的 UFW 策略是 DENY
所有传入和传出流量(通过 VPN 除外)。
问题
当我尝试启动 Docker 容器 docker container run -p 80:80 nginx
时,我无法在我的浏览器中使用本地主机 连接到 nginx 容器。
但是我可以通过telnet连接到本地的nginx容器
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
我知道 UFW 可能导致此问题的原因是一旦我禁用 UFW,我就可以在浏览器中毫无问题地连接到本地主机。
问题
当 UFW 设置为拒绝所有连接时,如何从我的浏览器连接到我的本地 nginx 容器?
我找到了解决问题的方法。
解决方案
ufw allow out on docker0 from 172.17.0.0/16
因为我知道nginx使用的具体端口,我也可以通过
使这个规则更严格ufw allow out on docker0 from 172.17.0.0/16 port 80 proto tcp
说明
Docker 为容器创建一个新的接口,你可以通过 运行 ifconfig
:
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:a4:5e:e9:9c txqueuelen 0 (Ethernet)
RX packets 87 bytes 17172 (17.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 117 bytes 14956 (14.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此接口通过 172.17.xxx.xxx 路由流量。您可以阅读更多关于我如何找到网络掩码
这为我们提供了编写规则所需的所有信息。如果您在不同的端口上发布容器,您可以通过执行以下操作来检查端口号和协议:
- 查找容器的 ID
docker container ls
- 找到容器的端口
docker container port {id}