Permission error on changing workdir with www-data user
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
...
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'
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:
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