Root用户在Composer容器内

在Docker容器中运行Composer运行时遇到一个基本问题。

可以在容器内以root用户身份运行composer吗? 我很困惑,创build的文件的所有者(例如,当使用composer require )是root

在容器内以root身份运行确定最佳实践?

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

安装应用程序一定要在容器内完成。 构build映像的Dockerfile必须先安装应用程序,并在容器内部进行。 如果你正在使用一个容器来运行一个自定义的应用程序(例如php7),并且使用节点等构build,那么执行安装的构build容器是隔离应用程序的更新和安装行为与主机系统的正确方法。

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

一般来说,如果应用程序需要root权限来执行基于configuration的更新模块等操作,我使用docker-compose来build立一个以root身份执行所有操作的build容器,然后退出。 我为实际的应用程序容器使用cap-drop部分来尽可能多地移除function。

许多应用程序需要setuidsetgid才能删除权限,例如nginx需要这些权限才能从root更改为www-data:www-data 。 如果以用户www-data出现, nginx将会失败。 应用程序在进行更改后应该放弃这些function。

docker集装箱应该只能用于运行一个应用程序。 任何安装应用程序的应该在容器外部完成。

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