项目场景:外部访问docker容器内的接口,需要将端口暴露出来。
docker run -v /workspace:/root/workspace -itd --name [容器名] -p 容器内端口:主机端口 镜像IP bash
问题描述
主机访问容器映射端口报 :
curl: (56) Recv failure: Connection reset by peer

排查过程:
1、检查容器运行是否开启可端口映射
docker ps -a

注意:8080 是容器需要映射的端口,8888是容器映射到主机的端口
明显是暴露了,但是通过telnet抓取报错:
telnet IP 端口

2、检查端口是否被监听
# 进入容器
docker exec -it 容器ID bash
# 查看端口是否被监听
netstat -an | grep 8080
# 或者
netstat -nltp
# 检查端口是否可以访问
curl 127.0.0.1:8080
# 查看主机网络端口映射
docker port 容器ID

通过上面操作,发现端口映射,容器内端口已被监听,并且curl 是可以访问的。
解决方案:
- 其实排查到这一步就可以解决了,可以看到容器内netstat监听IP是127.0.0.1的端口;
- 在容器内部的监听端口为127.0.0.1的话,那么只能接受容器内部来自127.0.0.1的本地回环访问。来自容器外外部的访问请求将被拒绝。
- 因此,这个问题的修复原因实际上很简单,只需要将监听ip改为0.0.0.0即可。

Docker容器外部访问问题:解决127.0.0.1端口限制
本文讲述了在Docker中,如何排查并解决外部访问容器内8080端口的问题,发现问题在于容器内端口监听为127.0.0.1,导致仅能接受本地回环访问,通过将监听IP改为0.0.0.0解决了外部访问问题。
1353






