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

Docker部署Apache/Nginx在Windows正常,Linux Mint下报403权限错误求助

问题:Linux Mint下Docker部署Apache/Nginx出现403权限错误

在Windows 11上通过Docker部署Laravel环境一切正常,但在Linux Mint系统部署时,Apache和Nginx均出现403错误,尝试重装组件、设置权限、检查端口等操作均未解决。

错误信息

[core:crit] [pid 18] (13)Permission denied: [client 172.18.0.1:48670] AH00529: /var/www/html/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable and that '/var/www/html/' is executable

相关配置文件

Dockerfile

FROM php:7.4.1-apache

USER root

WORKDIR /var/www/html

RUN apt update && apt install -y \
        libpng-dev \
        zlib1g-dev \
        libxml2-dev \
        libzip-dev \
        libonig-dev \
        zip \
        curl \
        unzip \
    && docker-php-ext-configure gd \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-source delete

COPY apache/vhost.conf /etc/apache2/sites-available/000-default.conf

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN chown -R www-data:www-data /var/www/html && a2enmod rewrite

docker-compose.yml

version: '3'

services:
    app:
        build:
            context: .
            dockerfile: Dockerfile
        image: laravel
        container_name: app
        restart: unless-stopped
        tty: true
        ports:
            - "80:80"
        volumes:
            - ./:/var/www/html
        networks:
            - laranet

    mysql:
        image: mysql
        container_name: db
        restart: unless-stopped
        tty: true
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
        volumes:
            - mysqldata:/var/lib/mysql
        networks:
            - laranet

networks:
    laranet:
        driver: bridge

volumes:
    mysqldata:
        driver: local

vhost.conf

<VirtualHost *:80>
DocumentRoot /var/www/html/public

<Directory "/var/www/html">
    AllowOverride all
    Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

解决方案

1. 修复宿主机目录权限

Linux Mint文件系统权限校验严格,宿主机挂载目录需确保容器内www-data用户(UID通常为33)可访问:

# 给当前目录及子目录设置可执行权限(允许Apache遍历目录)
chmod -R 755 ./
# 将目录所属组改为www-data对应的GID(33)
chown -R :33 ./

2. 优化Dockerfile权限配置

在Dockerfile的chown命令后添加目录权限强制设置,避免挂载后权限丢失:

RUN chown -R www-data:www-data /var/www/html && a2enmod rewrite
# 新增:确保目录有可执行权限
RUN chmod -R 755 /var/www/html

3. 关闭SELinux限制(若启用)

SELinux可能阻止容器访问宿主机文件,临时关闭执行:

sudo setenforce 0

如需永久关闭,编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled后重启系统。

4. 匹配容器与宿主机用户UID/GID

在docker-compose.yml的app服务中添加用户配置,让容器进程使用宿主机当前用户的UID/GID:

services:
    app:
        # ...其他配置
        user: "${UID:-33}:${GID:-33}"

然后在宿主机创建.env文件:

echo "UID=$(id -u)" >> .env
echo "GID=$(id -g)" >> .env

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:15:40