您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用gosu vs USER的Docker

使用gosu vs USER的Docker

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。

Go 2022/1/1 18:14:37 有701人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶