php fpm在docker中运行还是不在docker中运行?
在dockerfile中,我得到了这个 我的问题是:如何检查哪个用户在php fpm容器下运行?在nginx中,如果我想找到答案,我会检查/etc/nginx/nginx.conf文件,其中有用户代码。但对于php fpm,我无法理解我怎么知道?不要告诉我使用whoami或类似的东西,因为这是当前登录的用户php fpm在docker中运行还是不在docker中运行?,php,linux,docker,nginx,permissions,Php,Linux,Docker,Nginx,Permissions,在dockerfile中,我得到了这个 我的问题是:如何检查哪个用户在php fpm容器下运行?在nginx中,如果我想找到答案,我会检查/etc/nginx/nginx.conf文件,其中有用户代码。但对于php fpm,我无法理解我怎么知道?不要告诉我使用whoami或类似的东西,因为这是当前登录的用户 我在上面向您展示的命令(我不知道它是如何实现的),但它生成了www用户和www组,并将此用户和组分配给我的所有文件和目录。然后设置将要登录的用户。但我不知道“写入”权限是如何工作的,因为文件
我在上面向您展示的命令(我不知道它是如何实现的),但它生成了www用户和www组,并将此用户和组分配给我的所有文件和目录。然后设置将要登录的用户。但我不知道“写入”权限是如何工作的,因为文件夹具有
rwxr-xr-x.
这意味着php fpm在www下运行。我们从未更改哪个用户在php fpm下运行,以及它是如何发生的?有人能给我解释一下吗?Docker采用的是隔离技术,但您仍然可以使用ps-ef
等等,所以只需运行
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
它将返回活动进程及其所有者的列表
例如,simplephp:8-fpm
显示:
docker exec -it ${container} ps -ef
接下来只需在/etc/passwd
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
它将显示
docker exec -it ${container} grep 'www-data' /etc/passwd
所以它肯定是带有uid 33的www数据
如果容器内部没有ps
,您有两个选项,可以安装它,也可以手动查找uid
要安装,请使用此命令(例如用于php:8-fpm
):
手动搜索只需grep/proc
docker exec -it -u 0 ${container} su -c "apt update -y && apt install procps -y"
php:8-fpm
因为其他容器以非根用户身份运行分叉进程,所以用户不会是0,在本例中,33我希望进程运行时uid为1000,并且容器相信用户是按照Dockerfile说明命名的www
。有理由相信这不会发生吗?问题是php fpm以www用户的身份运行php脚本。因为我更改了文件夹的权限,当我更改了前3位(是rwx,我设置了--)时,它就停止工作了。对于其他人,我设置(rwx)。如果它运行的是www以外的其他用户,它仍然可以工作。所以php fpm是在www下运行的,但我不知道这是怎么发生的。我们什么时候把它改为在www下运行的,还是php fpm docker映像中的默认值?php fpm没有ps。我应该安装它并更改图像。我不想这样做。/proc/7/status-没有这样的文件或目录。你需要更新你的linux知识。从proc登录到容器和grep内容。ps axu也这样做。所以docker exec容器ls-l/proc/。你将看到www数据,这足以确保100%我做到了,当你之前告诉我,有www权限。所以它是在www下运行的,对吗?你使用哪一种图像?
docker exec -it -u 0 ${container} su -c "apt update -y && apt install procps -y"
sudo docker exec -it ${container} ls -ln /proc/