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

Ubuntu环境下Docker出现403 Forbidden错误,疑似无法定位index.php

问题分析与修复方案

核心问题

你遇到的403 Forbidden错误主要源于三个关键问题:

  1. 容器卷挂载路径错误,导致Apache无法找到你的index.php文件
  2. Dockerfile中修改Apache文档根目录时,未定义APACHE_DOCUMENT_ROOT环境变量,替换操作无效
  3. 未确保Apache进程能访问挂载目录内的文件(权限配置缺失)

具体修复步骤

1. 修正docker-compose.yml的卷挂载配置

你的index.php位于项目根目录的src文件夹,需要将宿主机的src目录正确挂载到容器内Apache的文档根目录。原配置缺少容器内目标路径,属于错误写法,修改如下:

services:
  apache-php:
    image: apache-pdo
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      # 将宿主机src目录挂载到容器默认Apache文档根目录
      - /home/marnix/Documents/hacklab_php/book_management_system/src:/var/www/html
    ports:
      - "80:80"
    networks:
      - app-network
  # 其余mysql、phpmyadmin服务配置保持不变
networks:
  app-network:
    driver: bridge

2. 修复Dockerfile的基础配置与文档根设置

原Dockerfile缺少FROM基础镜像指令(致命错误),且文档根替换逻辑无效,以下是两种修复方案:

方案一:使用默认Apache文档根(新手推荐)

直接基于官方php-apache镜像构建,保留默认文档根/var/www/html,修改后的Dockerfile:

# 必须添加基础镜像,选择对应PHP版本的apache镜像
FROM php:8.2-apache

RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 80

LABEL org.opencontainers.image.source="https://github.com/MilesChou/docker-xdebug" \
    repository="https://github.com/MilesChou/docker-xdebug" \
    maintainer="MilesChou <jangconan@gmail.com>"

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

方案二:自定义文档根(按需选择)

若需将文档根改为自定义路径(如/var/www/src),需先定义环境变量再替换配置:

FROM php:8.2-apache

# 定义自定义文档根环境变量
ENV APACHE_DOCUMENT_ROOT /var/www/src

RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 80

# 替换Apache配置中的路径
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
# 创建自定义文档根目录
RUN mkdir -p ${APACHE_DOCUMENT_ROOT}

LABEL org.opencontainers.image.source="https://github.com/MilesChou/docker-xdebug" \
    repository="https://github.com/MilesChou/docker-xdebug" \
    maintainer="MilesChou <jangconan@gmail.com>"

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

此方案需同步修改docker-compose.yml的volumes配置,将宿主机src挂载到/var/www/src

3. 解决Ubuntu宿主机文件权限问题

Ubuntu下宿主机文件权限可能导致容器内Apache无法访问,执行以下命令修正:

# 设置目录可读可执行权限
chmod -R 755 /home/marnix/Documents/hacklab_php/book_management_system/src
# 将目录所有者改为Apache运行用户(容器内与宿主机www-data用户ID一致)
chown -R www-data:www-data /home/marnix/Documents/hacklab_php/book_management_system/src

4. 重新构建并启动容器

执行命令完成镜像重建与服务启动:

# 停止并清理旧容器
docker-compose down
# 重新构建镜像
docker-compose build
# 后台启动服务
docker-compose up -d

额外排查点

  • 确认index.php确实在src目录下,且文件名大小写正确(Linux系统区分大小写)
  • 若仍报错,查看Apache日志定位具体问题:
docker-compose logs apache-php

内容的提问来源于stack exchange,提问作者Marnix de Brock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:20:01