Docker php apache权限被拒绝
Posted
技术标签:
【中文标题】Docker php apache权限被拒绝【英文标题】:Docker php apache permission denied 【发布时间】:2022-01-18 10:18:37 【问题描述】:我正在为一个带有 apache、php 7.2 和 mariadb 的旧 php 项目配置 docker 设置。在我启动并运行容器后,当我尝试从 php 写入文件时,我的权限被拒绝。
解决这个问题的最佳方法是什么?
docker-compose.yml
version: "3"
networks:
dirtbike:
services:
webserver:
build:
context: .
dockerfile: Dockerfile
container_name: dirtbike-webserver
restart: 'always'
depends_on:
- database
ports:
- "80:80"
- "443:443"
networks:
- dirtbike
volumes:
- ./public_html:/var/www/html
database:
image: mariadb:10.3
container_name: dirtbike-database
restart: 'always'
networks:
- dirtbike
ports:
- "127.0.0.1:3306:3306"
environment:
mysql_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_DATABASE: $MYSQL_DATABASE
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
Dockerfile
FROM php:7.2-apache-stretch
RUN docker-php-ext-install pdo_mysql
RUN a2enmod ssl && a2enmod rewrite && a2enmod headers
RUN mkdir -p /etc/apache2/ssl
COPY ./Docker/ssl/*.pem /etc/apache2/ssl/
COPY ./Docker/config/apache/dirtbike.conf /etc/apache2/sites-available/000-default.conf
index.php
<?php
file_put_contents(__DIR__.DIRECTORY_SEPARATOR.'test.txt', 'lorem ipsum');
【问题讨论】:
【参考方案1】:问题是来自容器(www-root)的用户与来自主机的用户不同。
我在 docker-compose 文件中添加了 args:uid: $UID
,如下所示:
version: "3"
networks:
dirtbike:
services:
webserver:
build:
context: .
dockerfile: Dockerfile
args:
uid: $UID
container_name: dirtbike-webserver
restart: 'always'
depends_on:
- database
ports:
- "80:80"
- "443:443"
networks:
- dirtbike
volumes:
- ./public_html:/var/www/html
在 Dockerfile 中,我添加了 ARG uid
和 RUN usermod -u $uid www-data && groupmod -g $uid www-data;
,如下所示:
FROM php:7.2-apache-stretch
ARG uid
RUN docker-php-ext-install pdo_mysql
RUN a2enmod ssl && a2enmod rewrite && a2enmod headers
RUN mkdir -p /etc/apache2/ssl
COPY ./Docker/ssl/*.pem /etc/apache2/ssl/
COPY ./Docker/config/apache/dirtbike.conf /etc/apache2/sites-available/000-default.conf
RUN usermod -u $uid www-data \
&& groupmod -g $uid www-data;
【讨论】:
【参考方案2】:在您的 docker compose 文件中,您可以添加本地计算机用户。首先你需要检查当前的用户 id,在我的例子中是 ubuntu:
echo $UID
输出:
1001
docker-compose.yml:
webserver:
build:
context: .
dockerfile: Dockerfile
container_name: dirtbike-webserver
restart: 'always'
depends_on:
- database
ports:
- "80:80"
- "443:443"
networks:
- dirtbike
user: 1001 # local machine user id
volumes:
- ./public_html:/var/www/html
希望能帮到你。
【讨论】:
它不起作用。我得到了同样的结果。 @constantin.iordan 请出示您的dirtbike.conf
我找到了解决方案。我在这里发布了答案。以上是关于Docker php apache权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
Centos 7 / Apache / PHP - mkdir():权限被拒绝
Apache FastCgi、PHP-FPM、Suexec 权限被拒绝错误
Apache FastCgi、PHP-FPM、Suexec 权限被拒绝错误