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

Docker Compose部署WordPress无法关联外部PHP容器求助

问题描述

我通过以下Docker Compose配置部署了Apache、PHP和WordPress容器,希望WordPress能依赖并使用外部的PHP容器,但实际WordPress仍在使用自身镜像内置的PHP。即使停止PHP容器,WordPress容器依然能正常运行。我尝试在WORDPRESS_CONFIG_EXTRA中添加了WP_PHP_CONTAINER等定义,但问题仍未解决,特此求助。

当前Docker Compose配置

version: '3'
services:
  apache:
    image: httpd:2.4
    container_name: apache
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/local/apache2/htdocs
      #- ./config/apache/httpd.conf:/usr/local/apache2/conf/httpd.conf
      - myapp:/usr/lib/apache2/modules/
    networks:
      - mynetwork

  php:
    image: php:8.1-apache
    container_name: php
    volumes:
      - ./html:/var/www/html
      #- ./config/php:/usr/local/etc/php
      - myapp:/usr/lib/apache2/modules/
    networks:
      - mynetwork
  wordpress:
    image: wordpress:latest            
    ports:
      - "80:80"  # 若80端口被占用可修改
    environment:
      WORDPRESS_DB_HOST: percona-mysql
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: Passw0rd
      WORDPRESS_DB_NAME: sys 
      WORDPRESS_CONFIG_EXTRA: |
        define('WP_HOME', 'http://192.168.100.15');
        define('WP_SITEURL', 'http://192.168.100.15');
        define('WP_PHP_CONTAINER', 'php');  # 调整为你的PHP容器名称
        define('WP_APACHE_CONTAINER', 'apache');  # 调整为你的Apache容器名称
    volumes:
      - ./wordpress:/var/www/html 
    depends_on:
      - php
    networks:
      - mynetwork

networks:
  mynetwork:
    external: true

volumes:
   myapp:

已尝试的配置片段

WORDPRESS_CONFIG_EXTRA: |
         define('WP_HOME', 'http://192.168.100.15');
         define('WP_SITEURL', 'http://192.168.100.15');
         define('WP_PHP_CONTAINER', 'php'); # 调整为你的PHP容器名称
解决方案

核心问题分析

WordPress官方镜像本身就是Apache+PHP的集成镜像,自带完整的PHP运行环境。你添加的WP_PHP_CONTAINER这类自定义常量对WordPress镜像的运行机制没有任何作用——WordPress根本不识别这些自定义配置,只会用自身内置的PHP处理请求。depends_on仅控制容器启动顺序,无法改变WordPress容器的运行逻辑。

正确架构调整方案

要让WordPress使用外部PHP容器,需拆分架构:用独立Apache作为反向代理/静态资源服务器,PHP-FPM容器处理PHP请求,WordPress代码挂载到PHP-FPM容器中,不再使用官方WordPress镜像。

调整后的Docker Compose配置示例:

version: '3'
services:
  apache:
    image: httpd:2.4
    container_name: apache
    ports:
      - "80:80"
    volumes:
      # 挂载Apache配置文件,配置反向代理到PHP-FPM
      - ./config/apache/httpd.conf:/usr/local/apache2/conf/httpd.conf
      - ./config/apache/extra/httpd-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf
      # 挂载WordPress静态资源
      - ./wordpress:/var/www/html
    networks:
      - mynetwork
    depends_on:
      - php-fpm

  php-fpm:
    image: php:8.1-fpm
    container_name: php-fpm
    volumes:
      # 挂载WordPress代码
      - ./wordpress:/var/www/html
      # 可选:挂载自定义PHP配置
      # - ./config/php/php.ini:/usr/local/etc/php/php.ini
    networks:
      - mynetwork
    depends_on:
      - percona-mysql

  # 数据库服务保持原有配置
  percona-mysql:
    image: percona:latest
    container_name: percona-mysql
    environment:
      MYSQL_ROOT_PASSWORD: Passw0rd
      MYSQL_DATABASE: sys
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - mynetwork

networks:
  mynetwork:
    external: true

volumes:
  mysql-data:

关键配置步骤

  1. Apache配置调整:在Apache的httpd.conf中启用proxy、proxy_fcgi模块,并在虚拟主机配置中把PHP请求转发到PHP-FPM容器:
# httpd.conf中启用模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

# 虚拟主机配置示例
<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName 192.168.100.15

    <Directory /var/www/html>
        AllowOverride All
        Require all granted
    </Directory>

    # 将.php请求转发到PHP-FPM容器的9000端口
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php-fpm:9000/var/www/html/$1
</VirtualHost>
  1. 替换官方WordPress镜像:不再使用wordpress:latest镜像,直接将WordPress代码下载到本地./wordpress目录,挂载到PHP-FPM和Apache容器中。

  2. 数据库配置:确保PHP-FPM容器能连接到percona-mysql服务,手动创建或通过WordPress安装向导生成wp-config.php,填写正确的数据库信息。

验证方法

启动所有容器后,停止php-fpm容器,此时Apache无法处理PHP请求,页面会显示502错误,说明WordPress已依赖外部PHP环境。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:11:05