使用 Docker 卷的 WP-CLI 文件权限问题
WP-CLI file permission problems using Docker volumes
wordpress:cli
容器无法操作与 wordpress
容器共享的卷上的文件。
这是我用于 bootstrap 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
我 运行 docker 在 mac.
上编写 1.18.0 和 docker 引擎 17.12.0-ce
我还创建了a github issue。
我假设你的问题是 "How do I fix WP-CLI file permission problems using Docker volumes?"
您需要确保 运行 wp-cli 在两个容器中使用相同的 UID。
从命令行:
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
是 运行 wp-cli 的解决方法,与 WordPress 容器中的 www-data 相同 UID/GID。出现问题是因为容器对 www 数据有不同的 UID/GID。参见 https://github.com/docker-library/wordpress/issues/256
您应该也可以将 user: "33:33"
添加到 docker-compose 文件中。参见 https://github.com/docker/compose/issues/1532
wordpress:cli
容器无法操作与 wordpress
容器共享的卷上的文件。
这是我用于 bootstrap 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
我 运行 docker 在 mac.
上编写 1.18.0 和 docker 引擎 17.12.0-ce我还创建了a github issue。
我假设你的问题是 "How do I fix WP-CLI file permission problems using Docker volumes?"
您需要确保 运行 wp-cli 在两个容器中使用相同的 UID。
从命令行:
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
是 运行 wp-cli 的解决方法,与 WordPress 容器中的 www-data 相同 UID/GID。出现问题是因为容器对 www 数据有不同的 UID/GID。参见 https://github.com/docker-library/wordpress/issues/256
您应该也可以将 user: "33:33"
添加到 docker-compose 文件中。参见 https://github.com/docker/compose/issues/1532