Docker localhost连接被UFW阻止

Docker localhost连接被UFW阻止,docker,networking,ubuntu-18.04,ufw,Docker,Networking,Ubuntu 18.04,Ufw,形势 ufw allow out on docker0 from 172.17.0.0/16 我正在努力学习如何在本地机器上使用docker。本地计算机设置为仅通过VPN路由流量。默认的UFW策略是拒绝所有传入和传出流量(通过VPN除外) 问题 当我尝试启动Docker容器Docker容器运行-p 80:80 nginx时,我无法在浏览器中使用localhost连接到nginx容器 但是,我可以通过telnet连接到本地nginx容器 $ telnet localhost 80 Trying

形势

ufw allow out on docker0 from 172.17.0.0/16
我正在努力学习如何在本地机器上使用docker。本地计算机设置为仅通过VPN路由流量。默认的UFW策略是拒绝所有传入和传出流量(通过VPN除外)

问题

当我尝试启动Docker容器
Docker容器运行-p 80:80 nginx
时,我无法在浏览器中使用localhost连接到nginx容器

但是,我可以通过telnet连接到本地nginx容器

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
我知道UFW可能导致这种情况的原因是,一旦我禁用UFW,我就可以毫无问题地连接到浏览器中的localhost

问题

ufw allow out on docker0 from 172.17.0.0/16

当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
解释

ufw allow out on docker0 from 172.17.0.0/16
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
docker0:flags=4163 mtu 1500
inet 172.17.0.1网络掩码255.255.0.0广播172.17.255.255
乙醚02:42:a4:5e:e9:9c txqueuelen 0(以太网)
接收数据包87字节17172(17.1KB)
接收错误0丢弃0超出0帧0
发送数据包117字节14956(14.9 KB)
发送错误0丢弃0溢出0载波0冲突0
此接口通过172.17.xxx.xxx路由流量。你可以阅读更多关于我如何找到网络掩码的信息

这为我们提供了编写规则所需的所有信息。如果要在其他端口上发布容器,可以通过执行以下操作检查端口号和协议:

  • 查找您的容器ID
    docker容器ls
  • 查找容器的端口
    docker容器端口{id}