在Docker容器中运行Composer时,我有一个基本的问题。
可以在容器内运行composer
用户root
吗?
我很困惑,所创建文件的所有者(例如使用composer require
时)是root
。
在容器内以root
运行OK最佳做法吗?
答案 0 :(得分:9)
在容器中使用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
出现,则会失败。应用应在进行更改后删除这些功能。
答案 1 :(得分:-9)
docker容器应该只能用于运行应用程序。安装应用程序的任何内容都应该在容器外部完成。
您通常会提供一个配置,将容器指向存储在某处的生产文件。这也是Composer安装的任何东西的入口点。除了任何缓存目录外,容器本身在任何地方都没有写权限。