You need to enable JavaScript to run this app. 同一Docker自定义网络下的多容器无法互相通信问题求助
优惠活动
大模型
产品
解决方案
定价
更多

同一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路径指向对应的项目目录

内容的提问来源于stack exchange,提问作者Alberto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 18:42:02