Docker Composer容器中的Root用户

Docker Composer容器中的Root用户,docker,composer-php,root,user-permissions,Docker,Composer Php,Root,User Permissions,在Docker容器中运行时,我有一个基本问题 是否可以在容器内以用户身份运行composer? 我搞不清创建的文件的所有者(例如,当使用composer require时)是root 是否在容器内以root身份运行确定最佳做法?docker容器可能仅用于运行应用程序。任何安装应用程序的操作都应该在容器外部完成 您通常提供一个配置,将容器指向存储在某处的生产文件。这也是Composer安装的任何东西的入口点。除了任何缓存目录外,容器本身在任何地方都不应有写权限。在容器内使用root是可以的,因为容

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

是否可以在容器内以用户身份运行
composer
? 我搞不清创建的文件的所有者(例如,当使用
composer require
时)是
root


是否在容器内以
root
身份运行确定最佳做法?

docker容器可能仅用于运行应用程序。任何安装应用程序的操作都应该在容器外部完成


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

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

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

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

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


许多应用程序需要
setuid
setgid
来删除特权,例如
nginx
需要这些特权,因此它可以从
root
更改为
www-data:www-data
nginx
如果以用户身份出现,则会失败
www-data
。应用程序应该在自己进行更改后删除这些功能。

停靠的应用程序应该是自包含的,而不依赖于主机环境来运行它们现在的问题是:如何创建容器,包括其中的应用程序。这个容器应该自己创建吗?谁在更新所有包含的系统库,这些库可能会得到更新,通常是关键的安全更新?您仍然需要在容器外部创建docker容器。为什么“某物”不能将应用程序以可运行状态放入容器中?