Dockerfile "RUN chmod" 没有生效
Dockerfile "RUN chmod" not taking effect
其他一切都生效但权限没有改变,我错过了什么吗?
FROM joomla:3.9-php7.2-apache
RUN apt-get update \
&& apt-get install -y apt-utils vim curl
COPY ./joomla_html /var/www/html
RUN chmod -R 765 /var/www/html/
RUN chown -R www-data. /var/www/html/
RUN chmod -R 777 /var/www/html/tmp
RUN chmod -R 777 /tmp
RUN chmod -R 777 /var/www/html/modules
RUN chmod -R 777 /var/www/html/components
RUN chmod -R 777 /var/www/html/administrator/logs
RUN chmod -R 777 /var/www/html/images
RUN chmod -R 777 /var/www/html/uploads
COPY ./docker/php.ini /usr/local/etc/php/conf.d/php-extras.ini
EXPOSE 80
这就是我得到的,每个文件都有 1000:1000 的权限,我需要它是 www-data
ls -la /var/www/html 的输出是
total 144
drwxr-xr-x 19 1000 1000 4096 May 8 18:53 .
drwxr-xr-x 1 root root 4096 May 8 02:30 ..
drwxr-xr-x 25 1000 1000 4096 May 8 18:53 components
drwxr-xr-x 6 1000 1000 4096 May 8 18:53 images
drwxr-xr-x 68 1000 1000 4096 May 8 18:53 modules
drwxr-xr-x 2 1000 1000 4096 May 8 18:53 tmp
drwxr-xr-x 2 1000 1000 4096 May 8 18:53 uploads
复制文件时直接设置属主:
FROM joomla:3.9-php7.2-apache
RUN apt-get update \
&& apt-get install -y apt-utils vim curl
COPY --chown=www-data:www-data ./joomla_html /var/www/html
RUN chmod -R 765 /var/www/html/
COPY ./docker/php.ini /usr/local/etc/php/conf.d/php-extras.ini
EXPOSE 80
VOLUME /var/www/html
无法使用 运行 命令修改卷。它们在具有卷的临时容器中启动,并且只保存对容器的更改,而不保存卷。
您可以尝试要求上游存储库更改其映像以从 Dockerfile 中删除卷定义。或者你可以拉取他们的 repo 并构建你自己的没有卷的基础镜像版本。这些都不会阻止您稍后 运行 容器在该目录中有一个卷。
否则,如果您想扩展图像并使用 运行 命令进行更改,则需要将文件保存在另一个目录中。您还可以有一个入口点,在容器启动时将这些文件复制到 /var/www/html。
你也可以考虑多阶段构建,在第一阶段修复权限,然后在发布阶段将文件直接复制到卷中。正如您所注意到的,COPY 仍然适用于卷。它不是用临时容器实现的,因此可以将文件直接放在图像文件系统中。
其他一切都生效但权限没有改变,我错过了什么吗?
FROM joomla:3.9-php7.2-apache
RUN apt-get update \
&& apt-get install -y apt-utils vim curl
COPY ./joomla_html /var/www/html
RUN chmod -R 765 /var/www/html/
RUN chown -R www-data. /var/www/html/
RUN chmod -R 777 /var/www/html/tmp
RUN chmod -R 777 /tmp
RUN chmod -R 777 /var/www/html/modules
RUN chmod -R 777 /var/www/html/components
RUN chmod -R 777 /var/www/html/administrator/logs
RUN chmod -R 777 /var/www/html/images
RUN chmod -R 777 /var/www/html/uploads
COPY ./docker/php.ini /usr/local/etc/php/conf.d/php-extras.ini
EXPOSE 80
这就是我得到的,每个文件都有 1000:1000 的权限,我需要它是 www-data
ls -la /var/www/html 的输出是
total 144
drwxr-xr-x 19 1000 1000 4096 May 8 18:53 .
drwxr-xr-x 1 root root 4096 May 8 02:30 ..
drwxr-xr-x 25 1000 1000 4096 May 8 18:53 components
drwxr-xr-x 6 1000 1000 4096 May 8 18:53 images
drwxr-xr-x 68 1000 1000 4096 May 8 18:53 modules
drwxr-xr-x 2 1000 1000 4096 May 8 18:53 tmp
drwxr-xr-x 2 1000 1000 4096 May 8 18:53 uploads
复制文件时直接设置属主:
FROM joomla:3.9-php7.2-apache
RUN apt-get update \
&& apt-get install -y apt-utils vim curl
COPY --chown=www-data:www-data ./joomla_html /var/www/html
RUN chmod -R 765 /var/www/html/
COPY ./docker/php.ini /usr/local/etc/php/conf.d/php-extras.ini
EXPOSE 80
VOLUME /var/www/html
无法使用 运行 命令修改卷。它们在具有卷的临时容器中启动,并且只保存对容器的更改,而不保存卷。
您可以尝试要求上游存储库更改其映像以从 Dockerfile 中删除卷定义。或者你可以拉取他们的 repo 并构建你自己的没有卷的基础镜像版本。这些都不会阻止您稍后 运行 容器在该目录中有一个卷。
否则,如果您想扩展图像并使用 运行 命令进行更改,则需要将文件保存在另一个目录中。您还可以有一个入口点,在容器启动时将这些文件复制到 /var/www/html。
你也可以考虑多阶段构建,在第一阶段修复权限,然后在发布阶段将文件直接复制到卷中。正如您所注意到的,COPY 仍然适用于卷。它不是用临时容器实现的,因此可以将文件直接放在图像文件系统中。