You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下两个Laravel微服务容器通信报cURL error 7错误求助

错误根因

你遇到的连接拒绝问题由两个配置问题共同导致:

  • 容器内的localhost指向容器自身的网络命名空间,和宿主机的localhost不属于同一网络空间,你在8000端口容器内请求127.0.0.1:8100实际是访问当前容器自身的8100端口,自然无法连通。
  • 两个微服务使用独立的docker-compose配置启动,各自创建了名为sail的独立桥接网络,两个Laravel容器默认不在同一网络下,无法直接通过内网通信。

修复方案

方案1:宿主机转发(适合临时调试)

你的两个容器都已配置host.docker.internal指向宿主机网关,直接修改第一个服务中调用第二个服务的API地址,将http://127.0.0.1:8100/接口路径改为http://host.docker.internal:8100/接口路径即可,请求会通过宿主机的端口映射转发到对应的容器。

方案2:共用Docker网络(适合长期开发/生产环境,性能更优)

  1. 宿主机执行命令创建公共桥接网络:
docker network create shared-sail-network
  1. 修改第一个服务的docker-compose.yml配置:
  • 新增外部网络声明:
networks:
    sail:
        driver: bridge
    shared-sail:
        external: true
  • 给laravel.test服务绑定新增的公共网络:
services:
    laravel.test:
        # 其余原有配置保持不变
        networks:
            - sail
            - shared-sail
  1. 对第二个服务的docker-compose.yml做完全相同的配置修改,给它的laravel.test服务也绑定shared-sail公共网络。
  2. 两个服务分别执行docker-compose down && docker-compose up -d重启生效。
  3. 后续在第一个服务中调用第二个服务的接口,直接使用地址http://MP-Communication-Service-Laravel:8000/接口路径即可,注意此处端口是容器内部的8000端口,无需使用宿主机映射的8100端口。

补充注意事项

第二个服务的MySQL端口映射配置有误,容器内MySQL默认监听3306端口,你当前配置的33061:33061会导致宿主机无法正常连接第二个服务的数据库,建议修改为33061:3306。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:03