【问题标题】:Wordpress on Docker: Could not create directory on mounted volumeDocker 上的 Wordpress:无法在已安装的卷上创建目录
【发布时间】:2017-05-29 22:36:41
【问题描述】:

这是路径 /var/www/html 上 Wordpress Docker 容器中的原始文件:

$ docker exec 5b957c7b9c5ad054883694afbfb80d3c9df6707458d55011f471be0701f3890c ls -l
total 192
-rw-r--r--  1 www-data www-data   418 Sep 25  2013 index.php
-rw-r--r--  1 www-data www-data 19935 Jan  2 18:51 license.txt
-rw-r--r--  1 www-data www-data  7433 Jan 11 17:46 readme.html
-rw-r--r--  1 www-data www-data  5447 Sep 27  2016 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 May 16 21:50 wp-admin
-rw-r--r--  1 www-data www-data   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 www-data www-data  1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--  1 www-data www-data  2764 May 29 22:19 wp-config-sample.php
-rw-r--r--  1 www-data www-data  3148 May 29 22:19 wp-config.php
drwxr-xr-x  4 www-data www-data  4096 May 16 21:50 wp-content
-rw-r--r--  1 www-data www-data  3286 May 24  2015 wp-cron.php
drwxr-xr-x 18 www-data www-data 12288 May 16 21:50 wp-includes
-rw-r--r--  1 www-data www-data  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 www-data www-data  3301 Oct 25  2016 wp-load.php
-rw-r--r--  1 www-data www-data 33939 Nov 21  2016 wp-login.php
-rw-r--r--  1 www-data www-data  8048 Jan 11 05:15 wp-mail.php
-rw-r--r--  1 www-data www-data 16255 Apr  6 18:23 wp-settings.php
-rw-r--r--  1 www-data www-data 29896 Oct 19  2016 wp-signup.php
-rw-r--r--  1 www-data www-data  4513 Oct 14  2016 wp-trackback.php
-rw-r--r--  1 www-data www-data  3065 Aug 31  2016 xmlrpc.php

我正在尝试使用已安装的 Docker 卷启动 Wordpress 容器,以便能够持久存储自定义文件:

$ sudo docker run -p 80:80 --link some-mysql:mysql  -v /var/www:/var/www/html --name docker-wordpress -d wordpress

问题在于,即使在/var/www 中准确复制本地文件的所有权和权限:

$ sudo chown -R www-data:www-data /var/www
$ sudo find /var/www/ -type d -exec chmod 755 {} \;
$ sudo find /var/www/ -type f -exec chmod 644 {} \;

在容器内运行 Wordpress 时,我仍然遇到这种错误:

无法创建目录

如何正确设置权限以确保 Wordpress 能够写入已安装的 Docker 卷?

【问题讨论】:

    标签: wordpress docker chmod chown docker-container


    【解决方案1】:

    查看您的错误消息,我得出的结论是您正在尝试安装插件或更新 wordpress 本身

    这个问题有点难以解决。

    执行chown -R www-data:www-data /var/www 设置正确的用户:组权限应该在技术上解决它,但是..

    在新的 wordpress 上安装 uploadplugins 文件夹尚不存在,因此当安装程序尝试创建 plugins/subfolder 时会抛出错误。

    如何修复 Wordpress / Docker 插件安装权限问题

    然而,一旦掌握了这个问题,解决这个问题就很容易了。

    选项 A

    在您的 .Docker 文件中,在最后但在任何 [CMD] 命令之前添加以下内容。

    RUN mkdir /var/www/html/wp-content/plugins
    RUN mkdir /var/www/html/wp-content/uploads
    RUN chown -R www-data:www-data /var/www
    RUN find /var/www/ -type d -exec chmod 0755 {} \;
    RUN find /var/www/ -type f -exec chmod 644 {} \;

    选项 B

    ssh 进入你的 docker 容器
    docker exec -it <container_name> /bin/bash

    如果您不知道容器名称,请使用
    docker ps

    只需运行与上述示例相同的命令
    $ mkdir /var/www/html/wp-content/plugins
    $ mkdir /var/www/html/wp-content/uploads
    $ chown -R www-data:www-data /var/www
    $ find /var/www/ -type d -exec chmod 0755 {} \;
    $ find /var/www/ -type f -exec chmod 644 {} \;

    【讨论】:

    • 我在尝试创建插件目录时收到以下错误:mkdir: cannot create directory '/var/www/html/wp-content/plugins': No such file or directory 你有吗知道为什么会这样吗? Dockerfile:pastebin.com/fZgW50fr
    • 您需要将-p 标志添加到mkdir,如$ mkdir -p /the/path。选项 A 不适合我,选项 B 可以。
    【解决方案2】:

    在 Mathias Asberg 答案的基础上,您可以简单地创建 2 个文件夹,即插件和上传,将权限更新为 777 并挂载卷

    步骤:

    • mkdir plugins uploads
    • chmod -R 777 plugins uploads
    • 更新 docker-compose.yaml 以挂载卷
      volumes: # 
      - ./plugins:/var/www/html/wp-content/plugins
      - ./uploads:/var/www/html/wp-content/uploads
    

    【讨论】:

      最近更新 更多