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

如何实现两个Docker容器间CURL通信及配置优化

问题根因

你的两个site容器均为PHP-FPM服务,仅暴露FastCGI协议的9000端口,不支持直接响应HTTP请求,这是报错的核心原因:

  • curl site2:80 报错是因为site2容器没有启动80端口的HTTP服务
  • curl site2:9000 报错是因为HTTP请求和FastCGI协议不匹配,对方直接重置连接

所有HTTP请求需要走Nginx服务转发,和生产环境的逻辑一致。

docker-compose 结构优化方案

优先方案:统一走Nginx转发(对齐生产逻辑)

  1. 先修正挂载路径冲突问题:你原来的webserver服务同时把两个站点代码挂载到/var/www,后挂载的会覆盖前者,需要调整为分目录挂载:
# site1服务volumes调整
volumes:
  - ../site1:/var/www/site1
  - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini

# site2服务volumes调整
volumes:
  - ../site2:/var/www/site2
  - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini

# webserver服务volumes调整
volumes:
  - ../site1:/var/www/site1
  - ../site2:/var/www/site2
  - ./nginx/conf.d/:/etc/nginx/conf.d/
  1. 给Nginx配置两个虚拟主机,分别绑定site1.test、site2.test域名,请求分别转发到对应的site1、site2的9000端口的PHP-FPM服务。
  2. 在site1、site2服务中添加域名映射,让容器内的站点域名直接解析到Nginx服务:
# site1服务添加配置
extra_hosts:
  - "site2.test:webserver"

# site2服务如果需要请求site1也加对应的配置
extra_hosts:
  - "site1.test:webserver"

配置完成后在site1容器内直接curl site2.test就能正常请求,和生产环境请求公网域名的逻辑完全一致。
4. 可选优化:去掉webserver服务暴露的9000端口映射,PHP-FPM端口仅需同Docker网络内的服务访问,不需要暴露到宿主机,避免端口冲突。

备选方案:单站点配独立Nginx

如果需要站点完全隔离,可以给每个PHP服务配独立的Nginx服务,比如nginx-site1、nginx-site2,分别挂载对应站点的代码和配置,此时直接curl nginx-site2即可正常请求。

Dockerfile 优化和基础镜像选型建议

基础镜像选型

  • 优先升级PHP版本:PHP7.1已经停止官方维护多年,存在大量安全漏洞,如果业务兼容,优先选择官方维护的php:7.4-fpm-alpine3.16、php:8.1-fpm-alpine等长期支持版本,镜像体积小、安全更有保障。
  • 必须使用PHP7.1的场景:选择官方最后发布的稳定版本php:7.1-fpm-alpine3.7,不要使用第三方未验证的镜像。

Dockerfile优化点

  1. 合并RUN指令减少镜像层数,安装完成后清理缓存,大幅减小镜像体积
  2. 指定兼容PHP版本的Composer版本,避免最新版Composer不兼容旧PHP的问题
  3. 移除不必要的依赖,比如不需要bash的话可以去掉,用Alpine自带的sh即可

优化后的Dockerfile示例(兼容PHP7.1):

FROM php:7.1-fpm-alpine3.7

# 合并依赖安装、扩展编译流程,最后清理缓存
RUN apk --no-cache add \
    libzip-dev \
    libpng-dev \
    libjpeg-turbo-dev \
    && docker-php-ext-install zip pdo \
    && docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd \
    && rm -rf /var/cache/apk/* /tmp/*

# 安装兼容PHP7.1的Composer 2.2 LTS版本
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=2.2.21

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

相关产品推荐
方舟 Agent Plan

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

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