You need to enable JavaScript to run this app. Docker部署Apache虚拟主机后访问localhost仅展示目录列表问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:12:00