Docker中mkdir()php的权限被拒绝

uemypmqf  于 2023-03-21  发布在  PHP
关注(0)|答案(2)|浏览(258)

当我在docker中为mkdir运行我的php代码时,它在浏览器中显示如下内容

Warning: mkdir(): Permission denied in /var/www/html/test.php on line 9

Warning: mkdir(): Permission denied in /var/www/html/test.php on line 12

我一直在搜索,但无法找到任何合适的源代码供我使用。我如何允许docker给予我的php权限或解决方案是什么?
下面是我的PHP代码

<?php
$postk = "1220";
$root = "login/";
$room_id = "foile";
$NewRoot = "movie";

if (!file_exists($root . $postk)) {
    $dirPathp = $root . $postk;
    $resultp = mkdir($dirPathp, 0777, true);

    $dirPathpr = $root . $postk . "/" . $room_id;
    $resultpr = mkdir($dirPathpr, 0777, true);

} else {
    $dirPathpr = $root . $postk . " / " . $room_id;
    $resultpr = mkdir($dirPathpr, 0777, true);
} ?>

这是我的Docker文件

FROM php:7.3-apache

#Install git and Mysql Extensions for php

RUN apt-get update && apt-get install -y git
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN a2enmod rewrite

COPY . /var/www/html/
EXPOSE 80/tcp
EXPOSE 443/tcp

Docker compose文件

version: '3.8'

volumes:
  datafiles:

services:

  mysql:
    image: mysql:8.0.0
    container_name: mysql6
    environment:
      - MYSQL_ROOT_PASSWORD=sopno_1818120**
      - MYSQL_TCP_PORT=3306
      - TZ=Asia/Dhaka
    volumes:
      - datafiles:/var/lib/mysql
    restart: always

  website:
    container_name: php6
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - DB_HOST=mysql
      - MYSQL_DBPORT=3306
      - DB_USERNAME=sopnobari_tuneb
      - DB_PASSWORD=sopno_1818120**
      - DB_NAME=sopnobari_sopno
    ports:
      - "3050:80"
      - "3051:443"
    depends_on:
      - mysql
a1o7rhls

a1o7rhls1#

我有办法了
在docker文件中添加以下代码

COPY . /var/www/html/
RUN chown -R www-data:www-data /var/www #this line after COPY
EXPOSE 80/tcp
EXPOSE 443/tcp
2lpgd968

2lpgd9682#

出现这个问题是因为当你将一个卷挂载到你的docker容器中时,主机系统的文件和目录所有权也会沿着给容器。
在你的主机系统上的文件是由你的用户拥有的,而PHP在另一方面是在用户www-data上运行的。这种差异导致了权限问题。
检查this以解决问题。

相关问题