wordpress icon indicating copy to clipboard operation
wordpress copied to clipboard

Permission error on changing workdir with www-data user

Open sajjadG opened this issue 1 year ago • 2 comments

Following this solution https://github.com/docker-library/wordpress/issues/221#issuecomment-356457710 for changing wordpress to a subfolder, if I run the container with default user (root) everything works fine but if I set the user to anything else (whether the user exist in the image or not, or if the user has the permissions to the parent dir that the new dir is going to be created in), it can not create that dir and copy the wordpress files to it.

# docker run -it --rm wordpress ls -l /var/www/
total 4
drwxrwxrwt 3 www-data www-data 4096 Jun  7 07:37 html
# docker run -it --rm --user www-data -w /var/www/html/wordpress wordpress
WordPress not found in /var/www/html/wordpress - copying now...
tar: .: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: ./wp-trackback.php: Cannot open: Permission denied
tar: ./wp-settings.php: Cannot open: Permission denied
tar: ./wp-load.php: Cannot open: Permission denied
tar: ./wp-config-sample.php: Cannot open: Permission denied
tar: ./wp-comments-post.php: Cannot open: Permission denied
tar: ./wp-admin: Cannot mkdir: Permission denied
tar: ./wp-admin: Cannot mkdir: Permission denied
tar: ./wp-admin/images: Cannot mkdir: No such file or directory
tar: ./wp-admin: Cannot mkdir: Permission denied
tar: ./wp-admin/images/post-formats32-vs.png: Cannot open: No such file or directory
...

sajjadG avatar Jun 07 '24 07:06 sajjadG

If the dir exist with the right owner and permissions then it works

# mkdir -p wp/blog/
# chown -R www-data:www-data wp/
# docker run -it --rm --user www-data -v ./wp:/var/www/html -w /var/www/html/blog wordpress
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message
[Fri Jun 07 08:00:34.917602 2024] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.59 (Debian) PHP/8.2.20 configured -- resuming normal operations
[Fri Jun 07 08:00:34.918542 2024] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

sajjadG avatar Jun 07 '24 08:06 sajjadG

If the dir exist with the right owner and permissions then it works

This is expected -- if we're running as non-root (--user www-data), we can't automatically fix this in any way. :sweat_smile:

tianon avatar Jun 07 '24 17:06 tianon

When you create your own user in your Dockerfile you have to change permissions on the /var/www/html directory because an internal script wants to copy files over from /usr/src/wordpress with different permissions.

RUN chown -R "${UNAME}:${GNAME}" /var/www/html

Supportic avatar Mar 29 '25 19:03 Supportic