RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
COPY . /var/www
COPY --chown=www:www . /var/www
USER www
在dockerfile中,我得到了这个。
我的问题是:如何检查哪个用户正在php-fpm容器下运行?在nginx中,如果我想找出答案,请检查/etc/nginx/nginx.conf文件,并在其中写入用户信息。但是对于php-fpm我不知道。 我如何解决?请勿告诉我使用whoami或类似的方式,因为这是当前登录的用户。
我在上面显示的命令(我不知道它是怎么做的),但是它使www用户和www组成为一个用户,并将该用户和组分配给我的所有文件和目录。然后设置将要登录的USER。但是我不知道“写”权限的工作原理,因为文件夹具有rwxr-xr-x.
,这意味着php-fpm在www下运行。我们从未更改过哪个用户正在php-fpm下运行,它是如何发生的?有人可以向我解释吗?
答案 0 :(得分:2)
Docker是隔离技术,但是您仍然可以使用ps axu等,因此只需运行
docker exec -it container ps axu
,它将看到所有树,包括分叉的进程及其所有者。
例如简单的NGINX显示:
PID USER TIME COMMAND
1 root 0:00 nginx: master process nginx -g daemon off;
6 nginx 0:00 nginx: worker process
7 root 0:00 ps axu
对于php-fpm,您还可以grep / proc
docker exec -it container cat /proc/7/status
它将显示
Name: php-fpm
Uid: 33 33 33 33
Gid: 33 33 33 33
尝试grep / etc / passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
所以绝对是带有uid 33的www-data
答案 1 :(得分:0)
USER www
将容器运行的用户更改为 www
。如果 php-fpm 以非 root 身份运行,那么它将忽略池配置的 user
和 group
指令并以当前用户身份运行。这些指令仅在 php-fpm 以 root 身份运行时适用。
标准的 php-fpm docker 容器以 root 身份运行,但池配置为 www-data
。