【问题标题】:WP-CLI file permission problems using Docker volumes使用 Docker 卷的 WP-CLI 文件权限问题
【发布时间】:2018-02-02 11:46:10
【问题描述】:

wordpress:cli 容器无法操作与wordpress 容器共享的卷上的文件。

这是我用来引导 WordPress 的 docker-compose.yml 文件:

version: "3"

services:
  wordpress:
    image: wordpress
    ports: ["80:80"]
    volumes: ["wp_test:/var/www/html"]
    environment:
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: secret

  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret

  cli:
    image: wordpress:cli
    volumes: ["wp_test:/var/www/html"]
    command: sh -c "sleep 20 && wp core install --path=/var/www/html --url=localhost --title=test --admin_user=test --admin_password=test --admin_email=test@example.com"

volumes:
  wp_test:

我以docker-compose up 启动它,当wp-cli 设置安装时,出现警告:

cli_1        | Warning: Unable to create directory wp-content/uploads/2018/02. Is its parent directory writable by the server?

到目前为止,安装工作正常,但我想修复此警告,因为对于其他 wp-cli 任务而言,操作文件至关重要。

wordpress 容器内部,权限如下所示:

drwxr-xr-x  5 www-data www-data  4096 Feb  2 11:21 .
drwxr-xr-x  4 root     root      4096 Jan  4 01:30 ..
-rw-r--r--  1 www-data www-data   234 Feb  2 11:21 .htaccess
-rw-r--r--  1 www-data www-data   418 Sep 25  2013 index.php
-rw-r--r--  1 www-data www-data 19935 Jan  6 19:32 license.txt
-rw-r--r--  1 www-data www-data  7413 Dec 12  2016 readme.html
-rw-r--r--  1 www-data www-data  5434 Sep 23 12:21 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Jan 16 21:39 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 Feb  2 11:21 wp-config-sample.php
-rw-r--r--  1 www-data www-data  3144 Feb  2 11:21 wp-config.php
drwxr-xr-x  4 www-data www-data  4096 Feb  2 11:22 wp-content
-rw-r--r--  1 www-data www-data  3669 Aug 20 04:37 wp-cron.php
drwxr-xr-x 18 www-data www-data 12288 Jan 16 21:39 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  3306 Aug 22 11:52 wp-load.php
-rw-r--r--  1 www-data www-data 36583 Oct 13 02:10 wp-login.php
-rw-r--r--  1 www-data www-data  8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 www-data www-data 16246 Oct  4 00:20 wp-settings.php
-rw-r--r--  1 www-data www-data 30071 Oct 18 17:36 wp-signup.php
-rw-r--r--  1 www-data www-data  4620 Oct 23 22:12 wp-trackback.php
-rw-r--r--  1 www-data www-data  3065 Aug 31  2016 xmlrpc.php

但在 cli 容器中,相同的卷看起来像这样:

drwxr-xr-x    5 www-data www-data      4096 Feb  2 11:21 .
drwxr-xr-x    3 root     root          4096 Jan 10 07:36 ..
-rw-r--r--    1 xfs      xfs            234 Feb  2 11:21 .htaccess
-rw-r--r--    1 xfs      xfs            418 Sep 25  2013 index.php
-rw-r--r--    1 xfs      xfs          19935 Jan  6 19:32 license.txt
-rw-r--r--    1 xfs      xfs           7413 Dec 12  2016 readme.html
-rw-r--r--    1 xfs      xfs           5434 Sep 23 12:21 wp-activate.php
drwxr-xr-x    9 xfs      xfs           4096 Jan 16 21:39 wp-admin
-rw-r--r--    1 xfs      xfs            364 Dec 19  2015 wp-blog-header.php
-rw-r--r--    1 xfs      xfs           1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--    1 xfs      xfs           2764 Feb  2 11:21 wp-config-sample.php
-rw-r--r--    1 xfs      xfs           3144 Feb  2 11:21 wp-config.php
drwxr-xr-x    4 xfs      xfs           4096 Feb  2 11:22 wp-content
-rw-r--r--    1 xfs      xfs           3669 Aug 20 04:37 wp-cron.php
drwxr-xr-x   18 xfs      xfs          12288 Jan 16 21:39 wp-includes
-rw-r--r--    1 xfs      xfs           2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--    1 xfs      xfs           3306 Aug 22 11:52 wp-load.php
-rw-r--r--    1 xfs      xfs          36583 Oct 13 02:10 wp-login.php
-rw-r--r--    1 xfs      xfs           8048 Jan 11  2017 wp-mail.php
-rw-r--r--    1 xfs      xfs          16246 Oct  4 00:20 wp-settings.php
-rw-r--r--    1 xfs      xfs          30071 Oct 18 17:36 wp-signup.php
-rw-r--r--    1 xfs      xfs           4620 Oct 23 22:12 wp-trackback.php
-rw-r--r--    1 xfs      xfs           3065 Aug 31  2016 xmlrpc.php

虽然cli 容器中的用户是www-data(就像它在wordpress 容器中一样),但它无法创建所需的文件夹:

$ mkdir -p wp-content/uploads/2018/02
mkdir: can't create directory 'wp-content/uploads/': Permission denied

我在 Mac 上运行 docker compose 1.18.0 和 docker engine 17.12.0-ce。

我还创建了a github issue

【问题讨论】:

    标签: wordpress docker docker-compose wp-cli


    【解决方案1】:

    我假设您的问题是“如何使用 Docker 卷解决 WP-CLI 文件权限问题?”

    您需要确保在两个容器中以相同的 UID 运行 wp-cli。

    从命令行:

    docker run -it --rm \
        --volumes-from $container \
        --network container:$container \
        --user 33:33 \
        wordpress:cli core install --path=/var/www/html --url=localhost --title=test --admin_user=test --admin_password=test --admin_email=test@example.com
    

    --user 33:33 是在 WordPress 容器中使用与 www-data 相同的 UID/GID 运行 wp-cli 的解决方法。出现问题是因为容器对于 www-data 具有不同的 UID/GID。见https://github.com/docker-library/wordpress/issues/256

    您应该也可以将user: "33:33" 添加到您的 docker-compose 文件中。见https://github.com/docker/compose/issues/1532

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2017-09-23
      • 2015-10-25
      • 2019-11-30
      • 2020-08-07
      • 2017-08-08
      相关资源
      最近更新 更多