如何使用docker-compose的官方wordpress图片修复wp-content的文件权限

Dan*_*_DD 5 wordpress docker docker-compose

问题


我正在使用docker-compose和来自docker存储库的官方wordpress图像设置Wordpress本地环境。

我在窗户上。

问题是我在wp内容上存在一些权限问题,并且无法从Wordpress管理面板上载文件。 Wordpress错误无法创建目录

我已经做了什么


然后,我检查了容器内的文件权限,这是输出:

WordPress容器中的文件权限

正如你所看到的,我的老板wp-contentroot不是www-data

立即的解决方案是打开容器的bash并给
chown -R www-data:www-data /var/www/html/wp-content/

这当然可以,但是我不想每次启动一个新的wordpress项目时都执行此过程。为了实现这一点,我创建了一个Dockerfile这样的:

FROM wordpress:5.1.1

# install dos2unix (fix problem between CRLF and LF)
RUN apt-get update
RUN apt-get install -y dos2unix

# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
    && echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini

# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

我的entrypoint.sh样子是这样的:

#!/bin/bash
echo Fixing permissions...
chown -R www-data:www-data /var/www/html/wp-content/
Run Code Online (Sandbox Code Playgroud)

但是后来我意识到我要覆盖ENTRYPOINT原始的wordpress图片,并且容器始终以退出code 0

然后,我尝试使用CMD代替ENTRYPOINT,然后Dockerfile像这样更改了我的代码:

FROM wordpress:5.1.1

# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
    && echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini

CMD chown -R www-data:www-data /var/www/html/wpcontent/
Run Code Online (Sandbox Code Playgroud)

但是我总是收到文件或文件夹不存在的错误。

我也尝试过这样使用CMD
CMD ["chown", "-R", "www-data:www-data", "/var/www/html/wp-content/"]
但是没有成功。


有没有一种方法可以在原始命令之后运行ENTRYPOINT
您是否知道另外一种解决此问题的更好方法?

Pat*_*man 5

您可以修改./entrypoint.sh脚本以在执行 chown 命令后运行原始图像的默认入口点脚本:

#!/bin/bash
echo Fixing permissions...
chown -R www-data:www-data /var/www/html/wp-content/
docker-entrypoint.sh apache2-foreground
Run Code Online (Sandbox Code Playgroud)

  • 但这是最佳实践吗?如果默认入口点脚本在将来某个时刻发生更改怎么办?现在遇到这个问题,不确定我是否应该使用 DockerFile“扩展”wordpress 图像或按照您的答案建议进行操作。 (2认同)

小智 3

从 Docker 的文档来看,您应该使用的命令是RUN

\n\n
\n

不要将 RUN 与 CMD 混淆。RUN实际上运行一个命令并提交结果;CMD 在构建时不执行任何操作,但指定图像的预期命令。

\n
\n\n

所以 Dockerfile 中的行应该是:\nRUN chown -R www-data:www-data /var/www/html/wp-content

\n\n

另外,为了减少创建的图层数量和图像大小,我会链接尽可能多的命令RUN。例如(未测试):

\n\n
FROM wordpress:5.1.1\n\n# install dos2unix (fix problem between CRLF and LF) and increase upload limit\nRUN apt-get update -y && \\\n    apt-get install -y dos2unix && \\\n    touch /usr/local/etc/php/conf.d/uploads.ini \\\n    && echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini && \\\n    chown -R www-data:www-data /var/www/html/wp-content\n\n# fix permissions issues\nCOPY entrypoint.sh /\nRUN dos2unix /entrypoint.sh && \\\n    chmod +x /entrypoint.sh\n\nENTRYPOINT ["/entrypoint.sh"]\n
Run Code Online (Sandbox Code Playgroud)\n