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

如何阻止docker-compose启动时apache自动创建html目录并自定义为public_html

问题原因

官方php:7.3-apache镜像内置的启动脚本默认会校验/var/www/html目录是否存在,不存在就自动创建,所以你在Dockerfile的RUN阶段执行的删除操作会被容器启动阶段的逻辑覆盖,无法生效。

解决方案

方案一:将Apache默认站点根目录改为public_html(推荐,符合常规Web项目规范)

  • 修改Dockerfile内容如下:
FROM php:7.3-apache

# 替换Apache默认配置中的站点根目录路径
RUN sed -i 's!/var/www/html!/var/www/public_html!g' /etc/apache2/sites-available/000-default.conf /etc/apache2/apache2.conf

# 提前创建public_html目录并配置权限
RUN mkdir -p /var/www/public_html && chown www-data:www-data /var/www/public_html

# 可选:启动时自动删除自动生成的html目录
CMD ["sh", "-c", "rm -rf /var/www/html && apache2-foreground"]
  • 调整docker-compose.yml的挂载规则(可选)
    如果你的代码存放在本地的public_html目录,可直接修改volumes配置,避免挂载整个项目根目录:
volumes:
  - ./public_html:/var/www/public_html

修改完成后执行docker-compose up --build重建容器启动即可,此时Apache会直接使用public_html作为站点根目录,不会再依赖html目录。

方案二:强制阻止html目录生成(仅适用于确实不需要该目录的场景)

你可以覆盖镜像的默认启动脚本,跳过创建html目录的逻辑:

  • 在./docker/apache/目录下新建entrypoint.sh文件,内容如下:
#!/bin/bash
rm -rf /var/www/html
exec apache2-foreground
  • 本地执行命令给脚本添加执行权限:
    chmod +x ./docker/apache/entrypoint.sh
  • 修改Dockerfile引入自定义启动脚本:
FROM php:7.3-apache

RUN rmdir /var/www/html
COPY entrypoint.sh /usr/local/bin/
ENTRYPOINT ["entrypoint.sh"]
  • 执行docker-compose up --build重建容器启动即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:03