首页 > 解决方案 > docker上的nginx:对等方重置连接

问题描述

操作系统:Manjaro KDE;Docker 版本:19.03.12-ce

尝试搜索类似的问题,但没有任何帮助。

就此而言,在 docker 或任何其他容器上运行 nginx 时,我无法访问它。

$ docker run -p 80:80 nginx
$ curl -vvv localhost
*   Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.71.1
> Accept: */*
>
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

这是 netstat 输出的相关部分:

$ sudo netstat -pnltu | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      80884/docker-proxy

我也试过:

$ docker run -p 127.0.0.1:80:80 nginx

这导致netstat:

$ sudo netstat -pnltu | grep 80
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      81440/docker-proxy

结果相同。但是,如果我这样运行它:

$ docker run --network host -p 80:80 nginx

它按预期工作。知道为什么吗?

标签: dockernginx

解决方案


我想到了!

罪魁祸首是我的(mullvad 的)wireguard 配置,它将自己的 iptables 规则添加到主机以实现终止开关,强制整个流量通过 VPN,或丢弃它。

如果有人遇到类似的情况,请检查您的 iptables。

PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

推荐阅读