docker 容器中的权限仅部分使用 chown
Permission in docker Container just partly working with chown
我在 Docker 容器中的访问权限有问题。我正在将一个文件夹从主机复制到 docker 图像到文件夹 /var/www/html
中。此文件夹具有更深的文件夹结构。然后,我希望正在执行 apache 的 www-data 能够访问完整的 /var/www/html 文件夹。我使用以下 docker 文件创建容器。
#start with base Image from php
FROM php:7.3-apache
#install system dependencies and enable PHP modules
RUN apt-get update && apt-get install -y \
libicu-dev \
libpq-dev \
libmcrypt-dev \
mysql-client \
git \
zip \
unzip \
&& rm -r /var/lib/apt/lists/* \
&& docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
&& docker-php-ext-install \
intl \
mbstring \
pcntl \
pdo_mysql \
pdo_pgsql \
pgsql \
opcache
# zip \
# mcrypt \
#configure imap for mails
RUN apt-get update && \
apt-get install -y \
libc-client-dev libkrb5-dev && \
rm -r /var/lib/apt/lists/*
RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j$(nproc) imap
#install mcrypt
RUN apt-get update \
&& apt-get install -y libmcrypt-dev \
&& rm -rf /var/lib/apt/lists/* \
&& pecl install mcrypt-1.0.2 \
&& docker-php-ext-enable mcrypt
#install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
#set our application folder as an environment variable
ENV APP_HOME /var/www/html
#change uid and gid of apache to docker user uid/gid
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
# enable apache module rewrite
RUN a2enmod rewrite
#COPY Data to html
COPY --chown=www-data:www-data AppBare/ /var/www/html
#change ownership of our applications
RUN chown -R www-data:www-data /var/www/html
#Copy file to start schema update on startup
ENTRYPOINT [ "sh", "-c", "/var/www/html/app/Console/cake schema update -y && /var/www/html/app/Console/cake migration && /usr/sbin/apachectl -D FOREGROUND"]
EXPOSE 80
创建并启动容器后,我在访问服务网络服务器的网站时收到以下错误消息。然而,它也会用复制的图像加载网站,所以基本上,用户可以访问例如图片,css 等等。
SplFileInfo::openFile(/var/www/html/app/tmp/cache/models/demo_backend_cake_model_default_backend_dockertest_list):
failed to open stream: Permission denied
当我进入容器的控制台并使用 chown 命令重置权限时,问题消失了。所以命令本身一定是对的。此外,当我创建一个卷并将文件夹从主机挂载到 /var/www/html,
时,一切正常。
如何授予用户对文件夹的完全访问权限?我也尝试在复制数据之前切换为授予访问权限,但这也不起作用。
关于你最后的评论
The two files are created by the Entrypoint of the code /var/www/html/app/Console/cake schema update -y. So this is executed by the root user. Is it possible to say to execute this as www-data not as root?
答案是肯定的。您必须在入口点之前添加以下行:
USER www-data
这样,此行之后的所有内容 运行 都将属于该用户。
我在 Docker 容器中的访问权限有问题。我正在将一个文件夹从主机复制到 docker 图像到文件夹 /var/www/html
中。此文件夹具有更深的文件夹结构。然后,我希望正在执行 apache 的 www-data 能够访问完整的 /var/www/html 文件夹。我使用以下 docker 文件创建容器。
#start with base Image from php
FROM php:7.3-apache
#install system dependencies and enable PHP modules
RUN apt-get update && apt-get install -y \
libicu-dev \
libpq-dev \
libmcrypt-dev \
mysql-client \
git \
zip \
unzip \
&& rm -r /var/lib/apt/lists/* \
&& docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
&& docker-php-ext-install \
intl \
mbstring \
pcntl \
pdo_mysql \
pdo_pgsql \
pgsql \
opcache
# zip \
# mcrypt \
#configure imap for mails
RUN apt-get update && \
apt-get install -y \
libc-client-dev libkrb5-dev && \
rm -r /var/lib/apt/lists/*
RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j$(nproc) imap
#install mcrypt
RUN apt-get update \
&& apt-get install -y libmcrypt-dev \
&& rm -rf /var/lib/apt/lists/* \
&& pecl install mcrypt-1.0.2 \
&& docker-php-ext-enable mcrypt
#install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
#set our application folder as an environment variable
ENV APP_HOME /var/www/html
#change uid and gid of apache to docker user uid/gid
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
# enable apache module rewrite
RUN a2enmod rewrite
#COPY Data to html
COPY --chown=www-data:www-data AppBare/ /var/www/html
#change ownership of our applications
RUN chown -R www-data:www-data /var/www/html
#Copy file to start schema update on startup
ENTRYPOINT [ "sh", "-c", "/var/www/html/app/Console/cake schema update -y && /var/www/html/app/Console/cake migration && /usr/sbin/apachectl -D FOREGROUND"]
EXPOSE 80
创建并启动容器后,我在访问服务网络服务器的网站时收到以下错误消息。然而,它也会用复制的图像加载网站,所以基本上,用户可以访问例如图片,css 等等。
SplFileInfo::openFile(/var/www/html/app/tmp/cache/models/demo_backend_cake_model_default_backend_dockertest_list): failed to open stream: Permission denied
当我进入容器的控制台并使用 chown 命令重置权限时,问题消失了。所以命令本身一定是对的。此外,当我创建一个卷并将文件夹从主机挂载到 /var/www/html,
时,一切正常。
如何授予用户对文件夹的完全访问权限?我也尝试在复制数据之前切换为授予访问权限,但这也不起作用。
关于你最后的评论
The two files are created by the Entrypoint of the code /var/www/html/app/Console/cake schema update -y. So this is executed by the root user. Is it possible to say to execute this as www-data not as root?
答案是肯定的。您必须在入口点之前添加以下行:
USER www-data
这样,此行之后的所有内容 运行 都将属于该用户。