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

Docker Apache容器DocumentRoot不生效 默认指向htdocs而非/var/www/html

问题根因

核心原因有两点:一是你自定义的虚拟主机配置根本没有被Apache主配置加载,二是虚拟主机规则本身存在配置块误用、代理规则错误、语法残缺的问题,最终导致设置的DocumentRoot /var/www/html不生效,请求一直落到Apache默认的/usr/local/apache2/htdocs目录。

修复步骤

  • 首先解决虚拟主机配置不加载的问题
    官方httpd:alpine镜像默认主配置文件/usr/local/apache2/conf/httpd.conf中,引入虚拟主机配置的语句是被注释的,你只是把httpd-vhosts.conf复制到了extra目录,没有打开引入开关,Apache完全不会读取你写的vhost规则。同时你配置里用到了代理转发到php-fpm,默认镜像也没开启对应的代理模块,直接改apache.dockerfile在构建阶段处理这些配置即可:
    FROM httpd:alpine
    
    # 开启虚拟主机配置引入、加载代理及fcgi模块
    RUN sed -i \
      -e 's/#Include conf\/extra\/httpd-vhosts.conf/Include conf\/extra\/httpd-vhosts.conf/' \
      -e 's/#LoadModule proxy_module modules\/mod_proxy.so/LoadModule proxy_module modules\/mod_proxy.so/' \
      -e 's/#LoadModule proxy_fcgi_module modules\/mod_proxy_fcgi.so/LoadModule proxy_fcgi_module modules\/mod_proxy_fcgi.so/' \
      /usr/local/apache2/conf/httpd.conf
    
    ADD ./apache/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf
    
  • 修正httpd-vhosts.conf里的错误配置
    你原来的配置有三个明显错误:
    1. 误用<Location>块匹配文件系统路径,这个块是用来匹配URL访问路径的,给站点目录授权需要用<Directory>块
    2. 代理规则写错了,php-fpm走的是fcgi协议不是http协议,且不能把整站路径都反代到9000端口,只需要把php后缀的请求转发给php-fpm即可;另外不要写localhost作为php服务地址,docker-compose环境下直接用服务名php做主机名,容器内部网络会自动解析到对应php容器
    3. CustomLog行参数写残缺了,commo少了末尾的n,应为common
      修正后的配置如下:
    <VirtualHost *:80>
        ServerAdmin email@email.com
        DocumentRoot /var/www/html
        ServerName dev.flying
        ServerAlias dev.flying
        ErrorLog logs/dev.flying-error_log
        CustomLog logs/dev.flying-access_log common
    
        <Directory /var/www/html>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
    
        <FilesMatch \.php$>
            SetHandler "proxy:fcgi://php:9000"
        </FilesMatch>
    </VirtualHost>
    
  • 重新构建镜像启动服务
    改完配置后在项目目录执行以下命令,清除旧容器重新构建启动:
    docker-compose down
    docker-compose build --no-cache apache
    docker-compose up -d
    
    启动完成后再访问dev.flying,就会正常读取你挂载到/var/www/html的./wordpress目录内容,不会再跳转到默认的"It works!"页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:18:13