Composer 容器内的根用户

Root user inside Composer container

当 运行在 Docker 容器中 运行 宁 Composer 时,我有一个基本问题。

运行 composer 作为用户 root 在容器内可以吗? 我很困惑创建文件的所有者(例如使用 composer require 时)是 root.

运行 在容器中 root 是最佳实践吗?

一个docker 容器应该只用于运行 一个应用程序。安装应用程序的任何操作都应在容器外完成。

您通常会提供一个配置,将容器指向存储在某处的生产文件。这也是 Composer 安装的任何东西的入口点。容器本身在任何地方都应该没有写权限,任何缓存目录除外。

在容器内使用root是可以的,因为容器有很多被丢弃的权限。它无法访问硬件或安装路径。它本质上是一个非特权用户。

安装应用程序一定要在容器内完成。构建图像的 Dockerfile 必须首先安装应用程序,并且发生在容器内。如果您使用容器来 运行 自定义应用程序(例如 php7),该应用程序使用节点等构建,执行安装的构建容器是隔离应用程序更新和安装的正确方法来自主机系统的行为。

在使用 Docker 部署应用程序时,基本上什么都不应该 运行 在容器之外。例如,任何 cron 脚本都应该 运行 docker exec container script.sh 或类似于容器内的 运行 定期作业。

通常,如果应用程序需要 root 权限来执行诸如基于配置更新模块之类的操作,我会使用 docker-compose 建立一个 build 容器,该容器以 root 身份执行所有操作,然后退出.我为实际的应用程序容器使用 cap-drop 部分以删除尽可能多的功能。

许多应用程序需要 setuidsetgid 才能放弃权限,例如nginx 需要这些,因此它可以从 root 更改为 www-data:www-data。如果 nginx 作为用户 www-data 出现,它将失败。应用程序应该在自己进行更改后放弃这些功能。