当前位置: 首页 > 面试题库 >

使用gosu vs USER的Docker

汝承载
2023-03-14
问题内容

Docker 总是有一个USER命令以特定用户身份运行进程,但总的来说,许多事情必须以ROOT身份运行。

我看过很多图像,使用ENTRYPOINTwith gosu来提升运行的过程。

我仍然对的需求感到困惑gosu。USER不够吗?

我知道Docker 1.10的安全性已经发生了很大变化,但是我仍然不清楚在Docker容器中运行进程的推荐方法。

有人可以解释的时候我会用gosu对比USER

谢谢

编辑:

Docker 最佳实践指南不是很明确:它说如果进程可以在没有特权的情况下运行,请使用USER,如果需要sudo,则可能要使用gosu。这很令人困惑,因为可以将各种各样的东西作为ROOT安装在中Dockerfile,然后创建一个用户并赋予它适当的权限,然后最终切换到该用户并以该用户CMD身份运行。那么为什么我们需要sudo
gosu呢?


问题答案:

Dockerfile用于创建映像。当您无法再在Dockerfile中的运行命令之间更改用户时,我认为gosu作为容器初始化的一部分更有用。

创建映像后,可以使用gosu之类的东西在容器内入口点的末尾删除root权限。您最初可能需要root用户访问权限才能执行一些初始化步骤(修复uid,主机安装的卷权限等)。然后,一旦初始化,您将在没有root特权的情况下运行最终服务,并以pid
1的形式运行以干净地处理信号。

编辑:这是在docker和jenkins的映像中使用gosu的简单示例:https : //github.com/bmitch3020/jenkins-
docker

entrypoint.sh查找/var/lib/docker.sock文件的gid,并更新容器内的docker用户的gid以匹配。这允许将映像移植到主机上的gid可能不同的其他docker主机。更改组需要在容器内部具有root用户访问权限。如果我USER jenkins在dockerfile中使用过,我会被镜像中定义的docker组的gid所卡住,如果它与正在运行的docker主机不匹配,它将无法工作。但是,运行gosu所在的应用程序时,可以删除root用户访问权限。

在脚本末尾,exec调用可防止shell分叉gosu,而是用该进程替换pid
1。Gosu依次执行相同的操作,切换uid,然后执行jenkins进程,以使其接替pid1。这允许正确处理信号,否则外壳将忽略该信号为pid 1。



 类似资料:
  • 我一直在使用docker撰写文件来运行在生产中部署到kubernetes的微服务架构的开发环境,因此我使用将k8s提供的域名映射到撰写服务名称。例如 使用时一切正常。但是当使用新的(注意没有连字符)时,容器无法相互粉碎。Kafka连接失败。HTTP请求失败。 docker cli版本的compose与旧的命令之间是否有任何更改。没有hypen,我看不到docker compose的版本,但有了它,

  • 我在Scala2.11.1和Hzaelcast 3.5中使用kryo进行序列化。我试图将数据放在hazelcast映射中,但我得到了KryoException 下面是我的用户类序列化程序 现在,当我将用户类对象从Hcast客户端放入相应的映射中时,如下所示 它给了我这些例外: 以下是中的 请帮帮我!!

  • 本文向大家介绍webpack proxy 使用(代理的使用),包括了webpack proxy 使用(代理的使用)的使用技巧和注意事项,需要的朋友参考一下 为什么要写篇文章 这两天的开发中遇到一些需要代理才能解决的问题, 在这里记录一下, 方便以后的查阅. 为什么要用代理 跨域 在开发过程中, 我们的开发环境一般都是http:// localhost, 但是如果需要请求的数据不在本地, 那么我们就

  • 如何使用Spring RestTemplate发送GET请求?其他问题都用了POST,但我需要用get。当我运行这个程序时,程序继续工作,但似乎网络堵塞了,因为它在一个AsyncTask中,当我单击这个按钮后试图运行另一个AsyncTask时,它们将无法工作。 我试着做

  • 问题内容: 最近,我尝试了解 java.math.MathContext 的用法,但未能正确理解。它用于四舍五入。如果是,为什么不四舍五入十进制数字,甚至尾数部分。 从API文档中,我知道它遵循,和规范中指定的标准,但是我没有让他们在线阅读。 如果您对此有任何想法,请告诉我。 问题答案: @贾坦 谢谢您的回答。这说得通。您能否在BigDecimal#round方法的上下文中向我解释MathCont

  • 主要内容:下载 Nexus 3,启动 nexus 服务,访问 nexus 3.x目前 Nexus 分为 Nexus 2 和 Nexus 3 两个大版本,它们是并行的关系。与 Nexus 2 相比,Nexus 3 具有很多优势,例如支持更多的仓库格式、优化了用户的使用界面以及更加强大的搜索功能等等。 目前使用最多的,运行最稳定是 Nexus 2,但随着 Nexus 3 对 Maven 的支持越来越稳定,很多公司和组织都陆续开始使用 Nexus 3。 本节我们将介绍 Nexus