Docker用户权限说明

我有一个由此docker-compose命令创build的LEMP堆栈:

cadvisor: image: google/cadvisor:latest container_name: lemp_cadvisor ports: - "8082:8080" volumes: - "/:/rootfs:ro" - "/var/run:/var/run:rw" - "/sys:/sys:ro" - "/var/lib/docker/:/var/lib/docker:ro" ssh: build: ./ssh container_name: lemp_ssh ports: - "2222:22" volumes: - /home/core/www/:/var/www/:rw - /home/core/.ssh/:/root/.ssh/:ro phpmyadmin: build: ./phpmyadmin container_name: lemp_phpmyadmin links: - ssh volumes: - /var/www/phpmyadmin - ./phpmyadmin/var/www/phpmyadmin/config.inc.php:/var/www/phpmyadmin/config.inc.php:ro mariadb: build: ./mariadb container_name: lemp_mariadb env_file: ./mariadb/mariadb.env links: - ssh volumes: - /var/run/mysqld - /home/core/mysql/:/var/lib/mysql/:rw - ./mariadb/etc/mysql/my.cnf:/etc/mysql/my.cnf:ro php: build: ./php container_name: lemp_php links: - ssh volumes: - /var/run/php-fpm - ./php/usr/local/php7/etc/php-fpm.conf:/usr/local/php7/etc/php-fpm.conf:ro - ./php/usr/local/php7/etc/php.ini:/usr/local/php7/etc/php.ini:ro - ./php/usr/local/php7/etc/php-fpm.d/www.conf:/usr/local/php7/etc/php-fpm.d/www.conf:ro volumes_from: - ssh - mariadb - phpmyadmin nginx: build: ./nginx container_name: lemp_nginx links: - ssh ports: - "8080:80" - "8081:443" volumes: - ./nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro - ./nginx/etc/nginx/conf.d/php.conf:/etc/nginx/conf.d/php.conf:ro - ./nginx/etc/nginx/conf.d/cert/:/etc/nginx/conf.d/cert/:ro volumes_from: - php 

我将我的Wordpress文件存储在/home/core/www/my-wordpress-install-dir文件夹中的主机上。

从CoreOS主机SSH会话查看文件,文件夹的权限如下:

 core@core-01 ~/www/my-wordpress-install-dir $ ls -al total 272 drwxrwxrwx 5 core core 4096 Dec 16 14:36 . drwxr-xr-x 4 core core 4096 Dec 13 23:54 .. -rw-r--r-- 1 core core 418 Dec 13 23:09 index.php -rw-r--r-- 1 core core 19930 Dec 13 23:09 license.txt -rw-r--r-- 1 core core 7358 Dec 13 23:09 readme.html -rw-r--r-- 1 core core 5035 Dec 13 23:09 wp-activate.php drwxr-xr-x 9 core core 4096 Dec 13 23:09 wp-admin -rw-r--r-- 1 core core 271 Dec 13 23:09 wp-blog-header.php -rw-r--r-- 1 core core 1369 Dec 13 23:09 wp-comments-post.php -rw-r--r-- 1 core core 2764 Dec 13 23:09 wp-config-sample.php -rw-rw-rw- 1 33 33 3216 Dec 16 14:36 wp-config.php drwxr-xr-x 4 core core 4096 Dec 13 23:09 wp-content -rw-r--r-- 1 core core 3286 Dec 13 23:09 wp-cron.php drwxr-xr-x 16 core core 4096 Dec 13 23:09 wp-includes -rw-r--r-- 1 core core 2380 Dec 13 23:09 wp-links-opml.php -rw-r--r-- 1 core core 3316 Dec 13 23:09 wp-load.php -rw-r--r-- 1 core core 33710 Dec 13 23:09 wp-login.php -rw-r--r-- 1 core core 7887 Dec 13 23:09 wp-mail.php -rw-r--r-- 1 core core 13021 Dec 13 23:09 wp-settings.php -rw-r--r-- 1 core core 28594 Dec 13 23:09 wp-signup.php -rw-r--r-- 1 core core 4035 Dec 13 23:09 wp-trackback.php -rw-r--r-- 1 core core 3061 Dec 13 23:09 xmlrpc.php 

但是,如果我将lemp_ssh exec放入lemp_ssh容器,则权限如下所示:

 root@15a6b53835e4:/var/www/my-wordpress-install-dir# ls -al total 272 drwxrwxrwx. 5 500 500 4096 Dec 16 14:36 . drwxr-xr-x. 4 500 500 4096 Dec 13 23:54 .. -rw-r--r--. 1 500 500 418 Dec 13 23:09 index.php -rw-r--r--. 1 500 500 19930 Dec 13 23:09 license.txt -rw-r--r--. 1 500 500 7358 Dec 13 23:09 readme.html -rw-r--r--. 1 500 500 5035 Dec 13 23:09 wp-activate.php drwxr-xr-x. 9 500 500 4096 Dec 13 23:09 wp-admin -rw-r--r--. 1 500 500 271 Dec 13 23:09 wp-blog-header.php -rw-r--r--. 1 500 500 1369 Dec 13 23:09 wp-comments-post.php -rw-r--r--. 1 500 500 2764 Dec 13 23:09 wp-config-sample.php -rw-rw-rw-. 1 www-data www-data 3216 Dec 16 14:36 wp-config.php drwxr-xr-x. 4 500 500 4096 Dec 13 23:09 wp-content -rw-r--r--. 1 500 500 3286 Dec 13 23:09 wp-cron.php drwxr-xr-x. 16 500 500 4096 Dec 13 23:09 wp-includes -rw-r--r--. 1 500 500 2380 Dec 13 23:09 wp-links-opml.php -rw-r--r--. 1 500 500 3316 Dec 13 23:09 wp-load.php -rw-r--r--. 1 500 500 33710 Dec 13 23:09 wp-login.php -rw-r--r--. 1 500 500 7887 Dec 13 23:09 wp-mail.php -rw-r--r--. 1 500 500 13021 Dec 13 23:09 wp-settings.php -rw-r--r--. 1 500 500 28594 Dec 13 23:09 wp-signup.php -rw-r--r--. 1 500 500 4035 Dec 13 23:09 wp-trackback.php -rw-r--r--. 1 500 500 3061 Dec 13 23:09 xmlrpc.php 

经过一些改动后,我在主机上复制了wp-config.php 。 我的问题与这个权限,可能这是为什么我的SSH2会话不工作上传Wordpresspipe理中的文件。

我把这个添加到我的wp-config.php

 define('FTP_PUBKEY','/root/.ssh/wp_rsa.pub'); define('FTP_PRIKEY','/root/.ssh/wp_rsa'); define('FTP_USER','www-data'); define('FTP_PASS',''); define('FTP_HOST','10.0.2.2:22'); 

请给我一个解释,为什么如果我在主机上和容器中查看它们的文件权限如下。 谢谢!

权限(第一列)对我来说看起来是一样的(除了最后一个额外的点,这可能只是主机和容器之间的ls二进制文件的差异)。

不同的是文件的所有者和组。 所有者和组以ID存储,名称在/etc/group/etc/passwd查找。 如果系统在这些文件中找不到id的名称,则使用该号码。

在你的情况下,主机有一个UID / GID 500(这是core )的名称,但它没有UID / GID 33的名称。在容器中,它有相反的名字。 这是因为我提到的文件不在主机和容器之间共享。

我想我解决了它。 谢谢@dnephin的解释!

当您将整个Wordpress从主机共享到具有卷的容器时,我有这种WordPress安装的权限问题。

在我的堆栈中,我有一个基本的图像,这是一个debian与我的基本修改,每一个其他的图像将从这个图像。

在基本的形象,我有这个部分:

 ### Start of Nginx WEBSERVER setup RUN mkdir -p /var/www # Modify www-data user and set UID, GID to 500 # https://muffinresearch.co.uk/linux-changing-uids-and-gids-for-user/ RUN groupmod -g 500 www-data \ && usermod -u 500 www-data \ #&& `find / -user 33 -exec chown -h 500 {} \;` \ #&& `find / -group 33 -exec chgrp -h 500 {} \;` \ && usermod -g 500 www-data \ && chown -R www-data:www-data /var/www \ && chmod g+s /var/www ### End of Nginx WEBSERVER setup 

www-data不是由php或nginx安装创build的。 它是Debian中默认定义的用户/组,也可能是其他发行版。 一些PHP,Nginx的安装build议使用这个用户在他们的configuration文件。

如果你的主机用户的UID / GID是500,那么比这个脚本更改www-data用户的UID / GID从33到500.这样,如果你从主机共享任何东西,Docker认为这些文件和文件夹由www-data用户拥有。

在您的PHP-FPM设置文件中,也将用户和组设置为www-data

在你的nginx Dockerfile中,你也必须设置:

 # Allow Nginx to access /var/run/php-fpm/php-fpm.sock RUN usermod -aG www-data nginx 

这样nginx用户可以访问www-data所拥有的文件(你可以在nginxconfiguration文件中定义nginx的用户名)。

在这之后,我的Wordpress安装没有任何权限问题。 所有的文件驻留在主机+更新WordPress的作品完美无瑕。

我的LEMP堆栈: https : //github.com/DJviolin/LEMP