同一Docker自定义网络下的多容器无法互相通信问题求助
问题排查与解决步骤
核心问题原理
同Docker网桥网络下的容器互访,依赖服务名/容器名作为域名,且仅能访问目标容器内部暴露的端口,不会用到宿主机的端口映射规则,且localhost指向当前容器自身而非宿主机或其他容器。
排查步骤
第一步:确认访问目标的端口归属
你的配置中两个应用的HTTP请求统一由webserver(Nginx)服务转发,Nginx容器内部监听的是80和81两个端口,对应宿主机映射的8000和7999端口。你之前尝试的地址全部不符合容器互访规则:localhost:80/localhost:8000:指向administration容器自身,该容器未开启对应端口,访问失败app:80/app:8000:app为PHP-FPM服务,默认仅暴露9000端口(FastCGI协议,无法直接HTTP访问),且80/8000端口未在该容器开启,访问失败
正确访问地址:
- 从
administration容器访问app对应的站点:http://webserver:80 - 从
administration容器访问自身对应的站点:http://webserver:81
第二步:验证网络连通性
进入administration容器执行以下命令,确认网络层面互通:ping webserver如果无法ping通,在宿主机执行以下命令,确认两个容器均已加入
app-network网络:# 查看administration容器的网络挂载 docker inspect administration | grep -A 5 Networks # 查看webserver容器的网络挂载 docker inspect webserver | grep -A 5 Networks如果有容器未加入对应网络,检查
docker-compose.yml的网络配置是否正确,重启服务即可。第三步:验证端口连通性
网络连通的前提下,在administration容器内执行以下命令,确认Nginx的内部端口可访问:# 检查80端口连通性 nc -zv webserver 80 # 检查81端口连通性 nc -zv webserver 81如果端口无法连通,检查Nginx配置是否正确监听了80和81端口,确认Nginx服务正常运行。
第四步:排查Nginx转发规则
如果端口可通但HTTP请求返回异常,检查Nginx的站点配置:- 确认80端口的server块中,
fastcgi_pass参数指向app:9000 - 确认81端口的server块中,
fastcgi_pass参数指向administration:9000 - 确认两个站点的root路径指向对应的项目目录
- 确认80端口的server块中,
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

