首页 > 解决方案 > 无法在主机上卷曲 docker 端口 - “(56) Recv failure: Connection reset by peer”

问题描述

我查看了无数关于类似问题的 Stack Overflow 帖子,但没有找到解决方案,也没有了解如何解决我的具体问题。

在我的 Ubuntu VPS 上,我正在尝试运行 nginx docker 容器,并且可以在容器内卷曲端口,但是从主机卷曲端口会产生此错误。

脚步:

~:$ docker run -it --rm -d -p 8345:80 --name web nginx
580b5e4781e56adb9ce356892efd0d74bd0d7cad8022518cf077b3f2b203d9f6
~:$ curl http://localhost:8345
curl: (56) Recv failure: Connection reset by peer
~:$ docker exec -it web bash
root@580b5e4781e5:/# curl http://localhost:80
<!DOCTYPE html>
<html><head>
<title>Welcome to nginx!</title>
// ...etc
</html>
root@580b5e4781e5:/# exit
exit
~:$ docker ps -a
NAMES  STATUS          IMAGE    CONTAINER ID   PORTS
web    Up 54 seconds   nginx    580b5e4781e5   0.0.0.0:8345->80/tcp, :::8345->80/tcp
~:$

我怀疑我需要将我的 nginx 容器“绑定”到0.0.0.0- 但我对网络的了解还不够,无法弄清楚如何为这个 nginx 映像执行此操作,或者这是否有意义。

我在这台机器上使用了 ufw(简单的防火墙)——虽然它没有意义,但我也尝试过sudo ufw allow 8345——但这并没有真正的帮助。

我错过了什么?


输出telnet localhost 8345

~:$ telnet localhost 8345
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

netstat 的输出:

~:$ netstat -tulpn
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8345            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::8345                 :::*                    LISTEN      -

编辑

从那以后,我意识到我的 docker0 网络接口无法访问主机或外部世界。

我启动了两个 alpine 容器——它们可以在 docker0 网络上 ping 对方的 IP 地址,但不能 ping google.com。

我不知道如何解决这个问题。

标签: dockernginxcurl

解决方案


推荐阅读