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

Docker部署PHP5.4遗留应用时Apache容器访问故障求助

无法访问Docker中php-env容器映射的9000端口

我使用以下docker-compose配置构建mysql、phpmyadmin和php-env三个容器:

version: '3.1'

services:
  php-env:
    build: .
    platform: linux/amd64
    volumes:
      - "/opt/homebrew/var/www/:/var/www/html"
    ports:
      - "9000:8080"

  db:
    image: mysql
    restart: always
    platform: linux/amd64
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
    ports:
      - "3308:3306"
      
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    platform: linux/amd64
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "9001:80"

构建php-env使用的Dockerfile如下:

FROM --platform=linux/amd64 php:5.4-apache

WORKDIR /var/www/html

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf

RUN docker-php-ext-install MySQL

问题现象

db和phpmyadmin容器运行正常,本地可通过3308和9001端口访问,但php-env容器映射本地9000端口到容器8080后,访问localhost:9000时出现错误:

连接已重置。页面加载时与服务器的连接被重置。

我尝试在php-env容器终端执行/etc/init.d/apache2 start,返回[ ok ] Starting web server: apache2.,但本地访问问题依旧。

补充信息

  1. 构建日志显示Apache已在前台启动:
www-php-env-1     | [Tue Jul 18 03:03:42.075140 2023] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/5.4.45 configured -- resuming normal operations
www-php-env-1     | [Tue Jul 18 03:03:42.077266 2023] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
  1. 使用M1芯片的MacOS Ventura系统,已指定linux/amd64平台。
  2. 修改端口映射后问题仍存在,排除端口分配问题。

更新信息

容器内/etc/apache2/ports.conf显示Apache监听80端口:

# cat /etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

解决方案

核心问题

端口映射不匹配:docker-compose中把本地9000端口映射到容器的8080,但容器内Apache实际监听的是80端口,导致流量无法正确送达。另外Dockerfile中docker-php-ext-install的参数应为小写mysql,大写MySQL会导致扩展安装失败,也需要修正。

快速修复(推荐)

修改docker-compose.yml中php-env的端口映射,将"9000:8080"改为"9000:80",然后重启容器:

docker-compose restart php-env

若需调整容器内Apache监听端口至8080

  1. 修改Dockerfile,添加端口修改命令并修正扩展安装参数:
FROM --platform=linux/amd64 php:5.4-apache

WORKDIR /var/www/html

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
# 修改Apache监听端口为8080
RUN sed -i 's/Listen 80/Listen 8080/' /etc/apache2/ports.conf
RUN sed -i 's/:80/:8080/' /etc/apache2/sites-enabled/000-default.conf

# 修正扩展安装参数为小写mysql
RUN docker-php-ext-install mysql
  1. 重新构建镜像并重启容器:
docker-compose build php-env
docker-compose up -d php-env

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:09:51