Kev*_*ith 20 networking curl docker
从 AWS ec2 实例(运行docker),我正在尝试使用curl我的 docker 容器托管的 Web 服务。
鉴于:
[ec2-user]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b56fa0d76d5c $REGISTRY/$WORK/metrics:v0.1.0 "/bin/sh -c 'sh /root" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp insane_leakey
Run Code Online (Sandbox Code Playgroud)
我可以从容器内访问 Web 服务:
[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName'
Run Code Online (Sandbox Code Playgroud)
但是,我无法从主机中找到它:
[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)
我查看了有关此错误的详细答案curl,但不确定如何调试此问题。
Jas*_*tin 17
连接重置到 Docker 容器通常表示您已为容器定义了不指向应用程序的端口映射。
因此,如果您定义了 80:80 的映射,请检查 docker 实例中的进程实际上是否在端口 80 上运行 (netstat -an|grep LISTEN)。
当 Docker '代理' 获取连接,尝试连接到容器内的进程时,您会得到一个重置,失败,因此重置连接。
您可以通过在容器上安装 tshark 来对此进行调查,然后执行以下操作tshark -i any:
如果您随后在外部执行请求,您应该会看到如下所示的内容:
root@618910b515f0:/code# tshark -i any
Running as user "root" and group "root". This could be dangerous.
Capturing on 'any'
tshark: cap_set_proc() fail return: Operation not permitted
tshark: cap_set_proc() fail return: Operation not permitted
1 0.000000000 172.18.0.1 ? 172.18.0.3 TCP 76 45844 ? 8001 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=820044004 TSecr=0 WS=128
2 0.000019457 172.18.0.3 ? 172.18.0.1 TCP 56 8001 ? 45844 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
Run Code Online (Sandbox Code Playgroud)
网络数据包进来了,但它以 响应RST,这意味着它被拒绝了。
很可能您正在收听127.0.0.1而不是0.0.0.0- 所有 IP。您可以通过运行来验证这一点netstat -tulpn
| 归档时间: |
|
| 查看次数: |
119358 次 |
| 最近记录: |