I followed this giude to install wordpress in a container for test purposes but using mariadb
and linux as a host. Here is my docker-compose:
version: '3.8'
services:
database:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpressDB
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- mysql:/var/lib/mysql
wordpress:
depends_on:
- database
links:
- database
image: wordpress:latest
restart: always
ports:
- '8000:80'
environment:
WORDPRESS_DB_HOST: database:3306
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpressDB
volumes:
- ./wordpress:/var/www/html
- ./wordpress/plugins:/var/www/html/wp-content/plugins
- ./wordpress/themes:/var/www/html/wp-content/themes
- ./wordpress/uploads:/var/www/html/wp-content/uploads
- ./wordpress/wp-content:/var/www/html/wp-content
volumes:
mysql: {}
For now I can access the wp-admin
dashboard but can't update/install any plugin with error:
Could not create directory.
As mentioned here I've tried to change the permissions of the folders but with no success:
$ 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 {} \;
Here is the output from ls -l
-rwxrwxr-x 1 1000 985 405 Jul 12 06:30 index.php
-rwxrwxr-x 1 1000 985 19915 Jul 12 06:30 license.txt
drwxrwxr-x 1 1000 985 0 Jul 12 06:30 plugins
-rwxrwxr-x 1 1000 985 7345 Jul 12 06:30 readme.html
drwxrwxr-x 1 1000 985 0 Jul 12 06:30 themes
drwxrwxr-x 1 1000 985 0 Jul 12 06:30 uploads
-rwxrwxr-x 1 1000 985 7165 Jul 12 06:30 wp-activate.php
drwxrwxr-x 1 1000 985 20480 Jul 12 06:30 wp-admin
-rwxrwxr-x 1 1000 985 351 Jul 12 06:30 wp-blog-header.php
-rwxrwxr-x 1 1000 985 2328 Jul 12 06:30 wp-comments-post.php
-rwxrwxr-x 1 1000 985 5456 Jul 12 06:30 wp-config-docker.php
-rwxrwxr-x 1 1000 985 2913 Jul 12 06:30 wp-config-sample.php
-rwxrwxr-x 1 1000 985 5592 Jul 12 07:03 wp-config.php
drwxrwxr-x 1 1000 985 0 Jul 12 06:30 wp-content
-rwxrwxr-x 1 1000 985 3939 Jul 12 06:30 wp-cron.php
drwxrwxr-x 1 1000 985 40960 Jul 12 06:30 wp-includes
-rwxrwxr-x 1 1000 985 2496 Jul 12 06:30 wp-links-opml.php
-rwxrwxr-x 1 1000 985 3313 Jul 12 06:30 wp-load.php
-rwxrwxr-x 1 1000 985 44994 Jul 12 06:30 wp-login.php
-rwxrwxr-x 1 1000 985 8509 Jul 12 06:30 wp-mail.php
-rwxrwxr-x 1 1000 985 21125 Jul 12 06:30 wp-settings.php
-rwxrwxr-x 1 1000 985 31328 Jul 12 06:30 wp-signup.php
-rwxrwxr-x 1 1000 985 4747 Jul 12 06:30 wp-trackback.php
-rwxrwxr-x 1 1000 985 3236 Jul 12 06:30 xmlrpc.php
Where am I mistaken?
After a bit of digging, the problem is with this line that I added in my config.php
that removed the missing FTP error when I started the container:
define('FS_METHOD', 'direct');
After that I tried many times to chown
the directories of the site, with no success. Which is strange because I used the root account to change them. However they remained to group users
.
In the end I added the www-data
user to users
and root
(just in case) groups and that solved the problem.
usermod -a -G users www-data
usermod -a -G root www-data
Update
Another solution I found is instead of using a bind volume ./wordpress
to use normal volume wordpress
with read/write permissions. Here is the new docker-compose
:
wordpress:
depends_on:
- database
links:
- database
image: wordpress:latest
restart: always
read_only: false
ports:
- '8000:80'
environment:
WORDPRESS_DB_HOST: database:3306
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: database
volumes:
- wordpress:/var/www/html:rw
After the mentioned change the output of ls -l
for the folders is like this:
-rw-r--r-- 1 www-data www-data 405 Feb 6 2020 index.php
-rw-r--r-- 1 www-data www-data 19915 Jan 1 2021 license.txt
-rw-r--r-- 1 www-data www-data 7345 Dec 29 2020 readme.html
-rw-r--r-- 1 www-data www-data 7165 Jan 21 01:37 wp-activate.php
drwxr-xr-x 1 www-data www-data 2668 May 12 23:49 wp-admin
-rw-r--r-- 1 www-data www-data 351 Feb 6 2020 wp-blog-header.php
-rw-r--r-- 1 www-data www-data 2328 Feb 17 13:08 wp-comments-post.php
-rw-rw-r-- 1 www-data www-data 5456 Jul 2 02:02 wp-config-docker.php
-rw-r--r-- 1 www-data www-data 2913 Feb 6 2020 wp-config-sample.php
-rw-r--r-- 1 www-data www-data 5560 Jul 15 07:30 wp-config.php
drwxr-xr-x 1 www-data www-data 54 May 12 23:49 wp-content
-rw-r--r-- 1 www-data www-data 3939 Jul 30 2020 wp-cron.php
drwxr-xr-x 1 www-data www-data 8378 May 12 23:49 wp-includes
-rw-r--r-- 1 www-data www-data 2496 Feb 6 2020 wp-links-opml.php
-rw-r--r-- 1 www-data www-data 3313 Jan 10 2021 wp-load.php
-rw-r--r-- 1 www-data www-data 44994 Apr 4 18:34 wp-login.php
-rw-r--r-- 1 www-data www-data 8509 Apr 14 2020 wp-mail.php
-rw-r--r-- 1 www-data www-data 21125 Feb 2 00:10 wp-settings.php
-rw-r--r-- 1 www-data www-data 31328 Jan 27 21:03 wp-signup.php
-rw-r--r-- 1 www-data www-data 4747 Oct 8 2020 wp-trackback.php
-rw-r--r-- 1 www-data www-data 3236 Jun 8 2020 xmlrpc.php
Now wordpress updates/installs plugins and the update of wordpress itself is working flawlessly.
get docker container name
sudo docker ps
// output wordpress
interactive with container shell
docker exec -it wordpress /bin/bash
give permission to the user
chown -R www-data:www-data /var/www/html
exit the shell
exit
You should make your volumes like shown below:
volumes:
- ./wp-content/uploads:/usr/src/wordpress/wp-content/uploads
- ./wp-content/plugins:/usr/src/wordpress/wp-content/plugins
- ./wp-content/themes:/usr/src/wordpress/wp-content/themes
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
I found this solution in a discussion at:
https://github.com/docker-library/wordpress/issues/341
The WordPress image copies every file/folder found in /usr/src/worpress folder to the /var/www/html/ folder. When the copy begins it also changes the user and group permissions of the file so that the WordPress application can use it.
Hope this helps. You might also want to look at the links below.
https://salzam.com/dockerize-wordpress-with-themes-plugins-and-common-configuration/
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.