【问题标题】:Docker localhost connection blocked by UFWUFW 阻止了 Docker 本地主机连接
【发布时间】:2019-01-06 06:25:05
【问题描述】:

情况

我正在尝试学习如何在我的本地机器上使用 docker。本地计算机设置为仅通过 VPN 路由流量。默认的 UFW 策略是 DENY 所有传入和传出流量(通过 VPN 除外)。

问题

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

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

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.

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

问题

当 UFW 设置为拒绝所有连接时,如何从浏览器连接到本地 nginx 容器?

【问题讨论】:

    标签: docker networking ubuntu-18.04 ufw


    【解决方案1】:

    我找到了解决问题的方法。

    解决方案

    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 路由流量。您可以阅读更多关于我如何找到该网络掩码 here

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

    1. 找到你的容器 ID docker container ls
    2. 找到你的容器的端口docker container port {id}

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 2021-02-22
      • 2020-01-20
      • 2022-11-30
      • 1970-01-01
      • 2023-04-09
      • 2019-11-17
      • 1970-01-01
      • 2015-11-28
      相关资源
      最近更新 更多