Skip to content

docker wordpress报could not create directory

背景

为了安心写点东西,在工具上少折腾,使用了wordpress的官方镜像搭了服务,出于安全考虑,后台管理入口wp-admin需要做下变更。变更的方式可以是通过wp的插件,也可以通过修改代码。我选了wp插件的方式,尽量不去动原始代码。插件使用WPS Hide Login,安装的时候报错,installation failed: could not create directory

问题分析

看到这个报错信息,第一个想到的就是程序没有权限去创建目录。进入容器看下wp-content下的目录,发现upgradeuploads用户和组都是root。应该是这个问题了。

# 进容器
docker exec -it blog bash
# 看目录
www-data@134ff00708f0:~/html/wp-content$ ls -trl
total 24
-rw-r--r-- 1 www-data www-data   28 Jan  8  2012 index.php
drwxr-xr-x 6 www-data www-data 4096 Apr 15 02:08 themes
drwxr-xr-x 3 root root 4096 Apr 16 16:31 uploads
drwxr-xr-x 4 www-data www-data 4096 Apr 19 02:49 plugins
drwxr-xr-x 4 root root 4096 Apr 19 02:49 languages
drwxr-xr-x 2 root root 4096 Apr 19 02:49 upgrade

处理

首先我需要使用root用户登录,将问题目录的用户和组( `chown -R www-data:www-data chown -R www-data:www-data uploads upgrade languages` )改过来。

然后再使用正确的用户组( `www-data:www-data` ) 重启docker服务。

docker-compose中指定启动的用户和组的方式如下

services:
  wordpress:
    image: wordpress:latest
    container_name: blog
    user: "www-data:www-data"
    restart: always

但需要注意的是,由于修改了docker-compose.yml,起停服务需要使用docker-compose down docker-compose up,而不能使用 `docker-compose restart`。

结果

可以正常安装插件并更改后台管理入口了!

参考阅读

https://medium.com/@mccode/understanding-how-uid-and-gid-work-in-docker-containers-c37a01d01cf

Published in技术问题处理

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *