Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php fpm在docker中运行还是不在docker中运行?_Php_Linux_Docker_Nginx_Permissions - Fatal编程技术网

php fpm在docker中运行还是不在docker中运行?

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组,并将此用户和组分配给我的所有文件和目录。然后设置将要登录的用户。但我不知道“写入”权限是如何工作的,因为文件

在dockerfile中,我得到了这个

我的问题是:如何检查哪个用户在php fpm容器下运行?在nginx中,如果我想找到答案,我会检查/etc/nginx/nginx.conf文件,其中有用户代码。但对于php fpm,我无法理解我怎么知道?不要告诉我使用whoami或类似的东西,因为这是当前登录的用户


我在上面向您展示的命令(我不知道它是如何实现的),但它生成了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
它将返回活动进程及其所有者的列表

例如,simple
php: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/