点击Docker容器时对等方重置连接
我遇到了一个问题,无法向我创建的Docker容器发送网络请求。我已经暴露了正确的端口,所以我不确定这里还有哪些问题可能是错误的 我有一台服务器运行在容器点击Docker容器时对等方重置连接,docker,Docker,我遇到了一个问题,无法向我创建的Docker容器发送网络请求。我已经暴露了正确的端口,所以我不确定这里还有哪些问题可能是错误的 我有一台服务器运行在容器alice的localhost:10009: $docker exec-it alice bash bash-4.4#curl本地主机:10009 curl:(52)来自服务器的空回复 端口10009暴露在我的容器中: $docker端口alice 10009/tcp->0.0.0.0:10009 从主机执行相同的curl操作时,我会收到不同
alice
的localhost:10009
:
$docker exec-it alice bash
bash-4.4#curl本地主机:10009
curl:(52)来自服务器的空回复
端口10009暴露在我的容器中:
$docker端口alice
10009/tcp->0.0.0.0:10009
从主机执行相同的curl
操作时,我会收到不同的消息:
$curl localhost:10009
curl:(56)Recv故障:对等方重置连接
我会检查服务器应用程序是否配置为仅侦听来自其“本地主机”的请求,此检查取决于您使用的服务器类型,未提及该类型
一个简单的检查方法是按如下方式启动容器:
docker run --network host -d yourimagename
您不需要担心端口映射,因为您使用的是主机
网络
然后尝试curl,如果可以的话,那么您只需要查看服务器侦听IP设置
curl localhost:10009
我想进一步阐述@Bouzid Zitouni的回答。服务器绑定到的地址似乎确实存在问题 对等端的连接重置通常表示已经为容器定义了一个端口映射,该映射不指向侦听服务器。下面是一个例子来说明这一点:
docker run -p 10009:10009 -it ubuntu bash
在容器中安装nmap
:
apt-get update && apt install -y nmap
运行ncat
(仅限本地主机)
在主机上运行curl
:
# curl localhost:10009
curl: (56) Recv failure: Connection reset by peer
实际上,即使您根本没有任何服务器进程,也会得到相同的结果
运行ncat
(所有IP)
主机上的
Curl
已成功连接。希望这能有所帮助。我认为@Bouzid Zitouni的回答存在一些问题,根据以下说法:
这与nginx进程直接在Docker主机上而不是在容器中运行的隔离级别相同
但是,如果使用--网络主机
,容器中就不会有独立的网络,主机
网络驱动程序只在Linux主机上工作
发生连接被拒绝/重置问题的原因是服务器正在侦听容器内的127.0.0.1,并且端口转发将转到容器的外部IP(例如172.17.0.2)
解决方案
在您的情况下,您需要运行一个新的容器,使您的服务器能够侦听所有接口。使用pythonhttp.server
的示例:
docker run -p 8000:8000 -it python:3.7-slim python3 -m http.server --bind 0.0.0.0
注意
选项--bind 0.0.0.0
是http.server
的特定选项。很可能您的服务器有其他方法来指定这一点
参考文献:
使用
localhost
和127.0.0.1
时,我得到了相同的结果。更新了我的问题太棒了!伟大的
# ncat -v --listen 10009
...
Ncat: Listening on :::10009
Ncat: Listening on 0.0.0.0:10009
docker run -p 8000:8000 -it python:3.7-slim python3 -m http.server --bind 0.0.0.0