【发布时间】:2016-12-17 05:51:52
【问题描述】:
我正在使用 ECS 优化的 ECS 映像并使用 ECS 进行部署。
因此,如果我 bash 进入容器并 curl localhost 我得到预期的输出(预期在端口 80 上),这可以正常工作。
如果我运行docker ps
我得到以下输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234 orgname/imagename:release-v0.3.1 "npm start" 53 minutes ago Up 53 minutes 0.0.0.0:80->80/tcp ecs-myname-1234`
这表明端口80 正在按预期映射。 (我也看到了 Amazon ECS 代理,但在上面发布了它并不重要)
然后我可以运行netstat -tulpn | grep :80 并得到以下输出
(No info could be read for "-p": geteuid()=500 but you should be root.)
tcp 0 0 :::80 :::* LISTEN -
然后以 root 身份运行 sudo netstat -tulpn | grep :80 并得到以下输出
tcp 0 0 :::80 :::* LISTEN 21299/docker-proxy
这让我觉得它只是在侦听 IPv6 接口?我作为 localhost 的主机记录是 127.0.0.1 这就是为什么当我在主机上运行 curl localhost 或 curl 127.0.0.1 时我得到 curl: (56) Recv failure: Connection reset by peer
我还检查了安全组和网络 ACLS(不是说它们应该对 localhost 有影响)...
任何想法将不胜感激!
编辑:
为了更好地衡量(有些人建议当 ipv6 可用时 netstat 只显示 ipv6 而不是 ipv4。我也运行了这个命令 lsof -OnP | grep LISTEN 给出以下输出
sshd 2360 root 3u IPv4 10256 0t0 TCP *:22 (LISTEN)
sshd 2360 root 4u IPv6 10258 0t0 TCP *:22 (LISTEN)
sendmail 2409 root 4u IPv4 10356 0t0 TCP 127.0.0.1:25 (LISTEN)
exe 2909 root 4u IPv4 13802 0t0 TCP 127.0.0.1:51678 (LISTEN)
exe 21299 root 4u IPv6 68069 0t0 TCP *:80 (LISTEN)
exe 26395 root 4u IPv6 89357 0t0 TCP *:8080 (LISTEN)
【问题讨论】:
-
这似乎也适用于 Docker for AWS(完全相同)。你有什么发现吗?
-
有没有可能,容器内的应用没有绑定到80端口?您是否尝试从容器内部检查它?像 docker exec -it 1234 curl localhost
标签: amazon-web-services networking docker amazon-ecs