Docker网桥网络中容器间服务通信问题求助
问题分析与解决方案
你的访问URI是错误的,核心问题是混淆了容器内部服务端口和宿主机映射端口,以下是具体说明和修正方案:
核心错误点
启动geoserver容器的命令是:
docker run -p 8081:8080 --name geoserver --network="jakeypoo" geoserver:1.1.0
其中-p 8081:8080的含义是:将宿主机的8081端口映射到容器内部的8080端口。但你提到“geoserver容器内部服务监听8081端口”,这里存在矛盾,需要先明确容器内服务的实际监听端口。
正确的访问URI
同Docker网桥网络内的容器访问,应该使用容器内部服务的端口,而非宿主机映射端口:
- 如果容器内服务实际监听8080端口(对应启动命令的映射规则):
- 用容器IP访问:
http://172.17.0.2:8080/ - 更推荐用容器名访问(避免IP变动):
http://geoserver:8080/
- 用容器IP访问:
- 如果容器内服务确实监听8081端口:
- 你需要修正启动命令的端口映射为
-p 8081:8081,此时内部访问URI为http://172.17.0.2:8081/或http://geoserver:8081/
- 你需要修正启动命令的端口映射为
排查验证步骤
- 确认geoserver容器内服务的监听端口:
docker exec -it geoserver bash # 执行以下命令查看监听端口(二选一) netstat -tulpn | grep LISTEN ss -tulpn | grep LISTEN - 在idpproxy容器内测试访问:
docker exec -it idpproxy bash # 替换为正确的端口 curl http://geoserver:8080/
内容的提问来源于stack exchange,提问作者Jacob Steiner
相关产品推荐
相关产品推荐

