我正在设置一个带有docker-compose的Wordpress本地环境和来自docker存储库的官方wordpress图像。 我在窗户上。 问题是我在wp内容上有一些提交问题,而且我无法从我的Wordpress管理面板上传文件。
我检查了容器内的文件权限,这是输出:
正如你所看到的,我的wp-content
的所有者是root
而不是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"]
而我的entrypoint.sh
看起来像这样:
#!/bin/bash
echo Fixing permissions...
chown -R www-data:www-data /var/www/html/wp-content/
但后来我意识到我压倒了原始wordpress图像的ENTRYPOINT
,并且容器总是与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/
但我总是收到文件或文件夹不存在的错误。
我试过用CMD
也像这样:
CMD ["chown", "-R", "www-data:www-data", "/var/www/html/wp-content/"]
但没有成功。
有一种方法可以在原来的ENTRYPOINT
之后运行命令吗?
你知道另一种解决这个问题的更好方法吗?
从Docker的文档中,您应该使用的命令是RUN
。
不要将RUN与CMD混淆。 RUN实际上运行一个命令并提交结果; CMD在构建时不执行任何操作,但指定了图像的预期命令。
所以Dockerfile中的行应该是:RUN chown -R www-data:www-data /var/www/html/wp-content
此外,为了减少创建的图层数量和图像的大小,我会尽可能多地链接RUN
命令。例如(未测试):
FROM wordpress:5.1.1
# install dos2unix (fix problem between CRLF and LF) and increase upload limit
RUN apt-get update -y && \
apt-get install -y dos2unix && \
touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini && \
chown -R www-data:www-data /var/www/html/wp-content
# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh && \
chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]