使用Docker卷的WP-CLI文件权限问题

时间:2018-02-02 11:46:11

标签: wordpress docker docker-compose wp-cli

wordpress容器无法处理与docker-compose.yml容器共享的卷上的文件。

这是我用来引导WordPress的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 容器中一样),但它无法创建所需的文件夹:

$table->string('user_id')->unsigned();

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

我还创建了a github issue

1 个答案:

答案 0 :(得分:2)

我假设您的问题是“如何使用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