使用Docker用户指令时,多shell命令会遇到权限问题
我浏览了几篇关于Docker最佳实践的文章,并认识到作为非特权用户运行容器有一些明显的安全好处。所以我的第一个问题是:为什么要使用使用Docker用户指令时,多shell命令会遇到权限问题,docker,docker-compose,Docker,Docker Compose,我浏览了几篇关于Docker最佳实践的文章,并认识到作为非特权用户运行容器有一些明显的安全好处。所以我的第一个问题是:为什么要使用USER指令来构建您的图像?也就是说,为什么不简单地将映像构建为root,而是将容器作为受限用户运行?在这种情况下,USER似乎是多余的 故事并没有就此结束。我用USER尝试了各种用例。在基于debian快照构建图像时,我将USER放在所有相关apt get安装之后。到现在为止,一直都还不错。但是,当我尝试在用户的主目录中创建内容时,权限问题就浮出水面——不管我是否明
USER
指令来构建您的图像?也就是说,为什么不简单地将映像构建为root
,而是将容器作为受限用户运行?在这种情况下,USER
似乎是多余的
故事并没有就此结束。我用USER
尝试了各种用例。在基于debian快照构建图像时,我将USER
放在所有相关apt get
安装之后。到现在为止,一直都还不错。但是,当我尝试在用户
的主目录中创建内容时,权限问题就浮出水面——不管我是否明确地将用户
和组权限分配给封闭的父目录
每当我遇到一个明显不起作用的特性时,我都会问自己,它是否值得保留。那么,考虑到您可能可以从容器外部以受用户限制的方式(至少从权限的角度来看)执行所有操作,是否有保留
用户的实际原因呢?作为非根用户(Docker或其他)运行东西的主要原因之一是作为一个额外的安全层:即使您的应用程序受到某种程度的破坏,它也不能覆盖它自己的源代码或它为最终用户服务的静态内容。我通常会包含一个USER
指令,但仅在指令的最末端,以便它只影响docker run
命令的(默认)用户
来自某个基本图像
...
#以root用户身份执行所有安装
...
#并仅为运行时选择一个备用用户
使用某些东西
CMD[“应用程序”]
“主目录”并不是一个真正的Docker概念。例如,将应用程序存储在/app
(模式0755归root所有)中是非常典型的做法。我使用BuildKit
通过SSH访问私有git回购。因此,我需要RUN
选项--mount=type=ssh
,以便从host agent分配ssh凭据,同时从Dockerfile屏蔽这些凭据。为了实现这一点,Docker文档列出了一个示例,其中编写了~/.ssh/known_hosts
;因此,我隐式地使用了$HOME目录。