Docker部署Apache虚拟主机后访问localhost仅展示目录列表问题
问题排查与解决方案
核心问题汇总
- Docker Compose 配置覆盖了容器默认启动命令,导致Apache服务未随容器自动启动
- 虚拟主机配置未关闭目录索引功能,当默认首页文件缺失或解析异常时就会返回目录列表
- Dockerfile 中对Apache的启动操作属于镜像构建阶段执行的临时命令,容器启动后不会生效
- 未显式启用Apache必要的功能模块,可能导致PHP解析、默认首页识别异常
对应修改方案
1. 修正Dockerfile配置
移除镜像构建阶段无效的Apache启停命令,添加必要的模块启用操作:
FROM php:5.4.33-apache WORKDIR /var/www/html/ COPY . . COPY conf/apache.conf /etc/apache2/sites-available/000-default.conf # 启用rewrite、目录索引、PHP解析相关模块 RUN a2enmod rewrite dir php5 RUN a2ensite 000-default.conf
2. 修正虚拟主机配置
关闭目录索引,增加权限配置的兼容性:
Listen 80 <VirtualHost *:80> DocumentRoot "/var/www/html/web" DirectoryIndex index.php index.html <Directory "/var/www/html/web"> AllowOverride All Allow from All Require all granted # 显式关闭目录索引 Options -Indexes +FollowSymLinks </Directory> Alias /sf /var/www/html/lib/vendor/symfony/data/web/sf <Directory "/var/www/html/lib/vendor/symfony/data/web/sf"> AllowOverride All Allow from All Require all granted Options -Indexes +FollowSymLinks </Directory> </VirtualHost>
3. 修正Docker Compose配置
删除自定义的command配置,让容器使用基础镜像默认的Apache启动命令:
version: "3.7" services: MyWeb: image: myweb:latest ports: - 80:80 environment: DB_NAME: auth HOST_DB: localhost USER_DB: root DB_PASSWORD: 1234
4. 额外检查项
- 确认项目
web目录下存在index.php文件,文件权限设置为Apache进程可读(通常755权限即可) - 如果配置了本地挂载卷,确认挂载路径没有覆盖
/var/www/html/web下的项目文件
生效操作
重新构建镜像并启动容器即可:
docker-compose build docker-compose up -d
内容的提问来源于stack exchange,提问作者Jellestad
相关产品推荐
相关产品推荐

