docker - 无法在主机上卷曲 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。
我不知道如何解决这个问题。
解决方案
推荐阅读
- java - 为什么 Java Pair 显示 android.util.Pair 而不是值
- apache - Docker 上的 Vue Cli 3 - Apache 和虚拟主机的问题
- javascript - 如何制作时间戳登录表单
- javascript - 是否可以使用 findAll() 创建查询并通过使用来自 pivot 的 ForeignKey(关系多对多)获得过滤结果?
- python - 使用线性回归处理缺失值
- python - 使用关键字时如何在 Pycharm 中发出警告
- python-3.x - 最新的 centos docker 镜像在 yum 存储库中没有 python3
- python - Python; 获取字典的长度作为字典中的值
- python-3.6 - 如何将 user_input() 表存储到命名元组中
- javascript - 使用 javascript 将 DataView 对象转换为位图