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。
许多应用程序需要setuid
或setgid
才能删除权限,例如nginx
需要这些权限才能从root
更改为www-data:www-data
。 如果以用户www-data
出现, nginx
将会失败。 应用程序在进行更改后应该放弃这些function。
docker集装箱应该只能用于运行一个应用程序。 任何安装应用程序的应该在容器外部完成。
您通常会提供一个configuration,将容器指向存储在某处的生产文件。 这将是Composer安装的任何内容的入口点。 容器本身应该没有任何地方写权限,除了任何caching目录。