我有以下 docker-compose 檔案:
version: "3.1"
services:
www:
build:
context: .
dockerfile: Dockerfile.lamp
ports:
- "${WEBSERVER_PORT}:80"
volumes:
- ./www:/var/www/html/
如您所見,與 docker-compose.yml 檔案位于同一檔案夾中的 www 檔案夾是托管 Web 代碼的位置。
我有以下 dockerfile (Dockerfile.lamp):
FROM php:8.1-apache
RUN a2enmod rewrite
RUN docker-php-ext-install pdo pdo_mysql
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
libicu-dev \
zlib1g-dev \
g \
libpq-dev \
libmcrypt-dev \
git \
zip \
unzip
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install mysqli
RUN docker-php-ext-configure intl \
&& docker-php-ext-install intl
所有這些都有效,但是在我寫的 www/index.php 檔案中出現了一個問題
mkdir("testFolder", 0775, true);
給我:
Warning: mkdir(): Permission denied in /var/www/html/index.php on line 1
mkdir("testFolder"); 也沒有。作業
我嘗試將以下行添加到 Docker.lamp 檔案中,但沒有成功:
RUN chown -R www-data:www-data /var/www
我能做些什么?我已經檢查過:
- Docker 中的 mkdir() php 權限被拒絕
- 無法創建目錄。docker容器內的權限被拒絕
uj5u.com熱心網友回復:
一個可能的問題是您要掛載的目錄沒有正確的權限供www-data容器內的用戶讀取。在 Dockerfile 中運行chown并不能解決問題,因為在構建程序中安裝不存在。
一種解決方案是在安裝了卷的容器的運行實體上運行 chown:
docker-compose run www chown -R www-data:www-data /var/www
在 Dockerfile 中運行 chown 在鏈接示例中起作用的原因是因為檔案在構建期間被復制,然后 chown 正在復制的版本上運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531964.html
上一篇:將變數傳遞給with()的問題
