如何在Docker中以root身份运行php-fpm

5
当我在docker中运行php-fpm时,默认帐户为www-data,但我想在docker中以root身份运行。
我编辑了配置文件,将用户和用户组更改为root,但是我不知道如何添加-R,因此容器无法运行。

这不是一个好的安全实践。为什么你需要以root身份运行它呢? - Koala Yeung
我希望我的PHP应用程序能够管理由root创建的一些文件,例如,我的aria2是由root运行的,但我的netCloud是由www-data运行的。 - colin Han
1
我认为更安全的方式是使用用户www-data启动您的aria2。这样,PHP的安全问题就不会有可能危及系统中的所有文件。 - Koala Yeung
2个回答

9

如果您检查默认的PHP-FPM容器命令,您会发现它使用以下默认命令:php-fpm。您可以轻松地将其覆盖为php-fpm -R

对于docker-compose,我正在使用以下配置:

services:
  fpm:
    image: php:7.3-fpm
    volumes:
      - ./zzz-docker.conf:/usr/local/etc/php-fpm.d/zzz-docker.conf # Mount FPM config that runs FPM as root
    command: php-fpm -R # Allow running FPM as root

配置文件非常简单:
; Config to run PHP FPM as root (requires the -R flag to be passed to the entrypoint)
[www]
user = root
group = root

不必挂载自定义配置并更改命令,您可以构建一个自定义镜像,在Dockerfile中添加此配置文件,其格式如下所示:

FROM php:7.3-fpm

COPY ./zzz-docker.conf /usr/local/etc/php-fpm.d/zzz-docker.conf

CMD ["php-fpm", "-R"]

这些例子中的zzz-docker.conf文件位于项目的根目录中。
请记住,您应该意识到以root身份运行PHP-FPM所带来的安全风险。我仅在开发过程中使用上述配置。

从理论上讲,以root身份运行的php-fpm意味着只有容器本身才能被入侵。这与www-data能够访问容器的问题并没有什么不同,所以不应该成为更大的问题。 - undefined

1

以下是如何以root用户身份运行bash的方法:

首先,找到php-fpm的docker容器ID:

$ docker ps

p, 0.0.0.0:8008->80/tcp   webserver
e4689b3c1bc5        php:7.2-fpm                            "docker-php-entrypoi…"   2 months ago        Up 41 hours         9000/tcp   


然后运行以下命令:
$ docker exec -u 0 -it e4689b3c1bc5 bash

然后您可以以 root 用户身份运行 bash:
root@e4689b3c1bc5:/var/www# 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接