Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
点击Docker容器时对等方重置连接_Docker - Fatal编程技术网

点击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操作时,我会收到不同

我遇到了一个问题,无法向我创建的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
操作时,我会收到不同的消息:

$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)

解决方案

在您的情况下,您需要运行一个新的容器,使您的服务器能够侦听所有接口。使用python
http.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