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.,但本地访问问题依旧。
补充信息
- 构建日志显示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'
- 使用M1芯片的MacOS Ventura系统,已指定
linux/amd64平台。 - 修改端口映射后问题仍存在,排除端口分配问题。
更新信息
容器内/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
- 修改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
- 重新构建镜像并重启容器:
docker-compose build php-env docker-compose up -d php-env
内容的提问来源于stack exchange,提问作者sempraEdic
相关产品推荐
相关产品推荐

