Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Docker用户指令时,多shell命令会遇到权限问题_Docker_Docker Compose - Fatal编程技术网

使用Docker用户指令时,多shell命令会遇到权限问题

使用Docker用户指令时,多shell命令会遇到权限问题,docker,docker-compose,Docker,Docker Compose,我浏览了几篇关于Docker最佳实践的文章,并认识到作为非特权用户运行容器有一些明显的安全好处。所以我的第一个问题是:为什么要使用USER指令来构建您的图像?也就是说,为什么不简单地将映像构建为root,而是将容器作为受限用户运行?在这种情况下,USER似乎是多余的 故事并没有就此结束。我用USER尝试了各种用例。在基于debian快照构建图像时,我将USER放在所有相关apt get安装之后。到现在为止,一直都还不错。但是,当我尝试在用户的主目录中创建内容时,权限问题就浮出水面——不管我是否明

我浏览了几篇关于Docker最佳实践的文章,并认识到作为非特权用户运行容器有一些明显的安全好处。所以我的第一个问题是:为什么要使用
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目录。