簡體   English   中英

什么用戶是在 docker 中運行的 php-fpm 還是沒有 docker?

[英]what user is php-fpm running in docker or without docker?

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 組並將此用戶和組分配給我的所有文件和目錄。 然后設置將登錄的用戶。但我不知道“寫”權限是如何工作的,因為文件夾有rwxr-xr-x. 這意味着 php-fpm 在 www 下運行。 我們從未改變在 php-fpm 下運行的用戶以及它是如何發生的? 有人可以向我解釋一下嗎?

Docker是隔離技術,但是你還是可以用ps -ef ,所以直接運行

docker exec -it ${container} ps -ef 

它將返回活動進程及其所有者的列表。

例如簡單的php:8-fpm顯示:

UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 05:16 ?        00:00:00 php-fpm: master 
process (/usr/local/etc/php-fpm.conf)
www-data       7       1  0 05:16 ?        00:00:00 php-fpm: pool www
www-data       8       1  0 05:16 ?        00:00:00 php-fpm: pool www

接下來只需在/etc/passwd找到用戶

docker exec -it ${container} grep 'www-data' /etc/passwd

它會顯示

www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

所以它絕對是帶有 uid 33 的 www-data。

如果容器里面沒有ps ,你有2個選項,可以安裝,或者手動查找uid

對於安裝使用此命令(例如php:8-fpm ):

docker exec -it -u 0 ${container} su -c "apt update -y && apt install procps -y"

對於手動搜索,只需 grep /proc

sudo docker exec -it ${container} ls -ln /proc/

php:8-fpm因為其他容器以非 root 身份運行分叉進程,所以用戶不會是 0,在這種情況下是 33

USER www將容器運行的用戶更改為www 如果 php-fpm 以非 root 身份運行,那么它將忽略池配置的usergroup指令,而是以當前用戶身份運行。 這些指令僅適用於以 root 身份運行 php-fpm 的情況。

標准的 php-fpm docker 容器以 root 身份運行,但池配置為www-data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM