docker同容器下多项目curl调用死循环问题记录

业务常景

记录一下在搭建新项目时遇到的一个有意思的问题,博主本机环境是自己构建的一个简单的docker-compose 环境,包含:
nginx容器,
php5.4容器,
5.4容器下包含两个项目(aaa.com,bbb.com,一架简称为: A ,B)
单独请求 A,B项目都没有问题
但是当我的项目A在容器内通过php curl请求时报错

curl: (7) Failed to connect to port 80: Connection refused

这个问题的原因很简单, 当nginx将请求转发至项目A后, 项目A在容器内发起curl请求,默认请求的是本容器内的80端口,但是本机80端口并没有联通nginx.

因为不能修改代码中的curl请求地址,只能用域名访问,同时容器中host绑定的话,也只能用ip 绑定域名.后经过多方查询资料后,我通过修改docker-composer.yml 文件,临时解决了这个问题, 解决方法:
创建两个网络段

docker network create --subnet=172.30.0.0/24 app-network
docker network create --subnet=172.30.0.0/24 back-network

nginx容器分配两个网段

version: "3"
services:
  nginx:
    image: nginx:1.10-alpine
    container_name: "web"
    networks:
      app-networks:
        aliases:
          - "aaa.com"
          - "bbb.com"

      back-networks:
        aliases:
          - "aaa.com"
          - "bbb.com"

在这里插入图片描述
正如上图 , 我在php容器中 aaa.com 项目代码通过curl请求bbb.com项目,是可以形成访问链路的,但是也可以看到,这个链路很长, 造成了我一旦数据量过大,对网络的开销成倍增长.
所以此路不通

解决方案:
不同的项目,新增不同的php容器,要是有大佬有更好的解决方案,请评论

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐