Docker 现在有成熟的运行于非 root 用户的方案吗

2021-05-24 16:57:56 +08:00
 iblessyou

遇到的问题: 接到客户提的一个要求,使用 ps -ef 查看到的应用进程,不能是 root 运行的。

解决所做的尝试:

网上查了很久,发现比如 sudo,或者当前用户加入 docker 组,本质都还是 root 运行的 在官网看到 https://docs.docker.com/engine/security/rootless/

标题: Run the Docker daemon as a non-root user (Rootless mode) 其中: Rootless mode was introduced in Docker Engine v19.03 as an experimental feature. Rootless mode graduated from experimental in Docker Engine v20.10. 在 Docker Engine v19.03 中引入了无根模式作为实验特性。无根模式毕业于 Docker 引擎 v20.10 的实验。

那意思是 v19.03 才作为实验特性添加? 现在我们用的版本是 V18,docker-compose 才刚支持到 v19 版本。

求教: 是我理解错了,还是说现在确实没有比较稳定成熟的方案呢?

2455 次点击
所在节点    Docker
15 条回复
Ariver
2021-05-24 17:05:18 +08:00
你是说,从宿主机上看,docker 里面的进程的是 root ?
这个 root 不是宿主机上的 root 啊
你可以自己写 Dockerfile 里面指定一个普通用户运行程序。
pabupa
2021-05-24 17:10:32 +08:00
我之前好像看多说,podman 支持非 root 用户。不过我没用过……
iblessyou
2021-05-24 17:15:21 +08:00
@Ariver 不是,是 docker 运行后,在宿主机上 PS -ef
查看进程,不是说容器内,容器内是什么无所谓
Ariver
2021-05-24 17:17:14 +08:00
那就是 podman
iblessyou
2021-05-24 17:24:39 +08:00
@Ariver 工程量有点大,据我所知,公司现在没用过,时间紧,会出什么问题难预计。
而且几个部门做的,加上数据库之类的第三方包,总共近 40 个,他们应该包不通用吧?
patrickyoung
2021-05-24 17:25:48 +08:00
@iblessyou image 通用,redhat 做的,你们买 redhat 服务就行
iblessyou
2021-05-24 17:31:06 +08:00
@patrickyoung 必须还要买额外服务吗?
Jirajine
2021-05-24 17:41:14 +08:00
最简单稳定的方式就是镜像本身做适配,参考 linuxserver.io 的镜像。
patrickyoung
2021-05-24 18:00:43 +08:00
@iblessyou 你要 podman,要 rootless,又不想背锅,又不想出钱,那怎么玩?
patrickyoung
2021-05-24 18:01:23 +08:00
你要愿意背锅,那直接 podman 也行,反正 podman 免费,只是买 rh 的服务而已
iblessyou
2021-05-24 18:37:03 +08:00
@patrickyoung 呃,莫激动,可能你没理解我意思。
我也只是个普通开发,能解决了解决。
解决不了像换工具,需要花费这些,只要能尽可能了解下,给上面阐明问题解决方案,可能有什么坑就行。我就算有个满意交代了。
需要怎么做由他们决定 ,对吧。
bwangel
2021-05-27 10:13:51 +08:00
> 接到客户提的一个要求,使用 ps -ef 查看到的应用进程,不能是 root 运行的。

感觉实现这个需求不需要 podman 啊?

FROM ubuntu:20.04
RUN useradd -m app
RUN exec setuidgid app app gunicorn

这样就会以 app 用户启动 1 号 进程 gunicorn,用户在容器内 ps 看到的进程都不属于 root
iblessyou
2021-05-27 11:08:10 +08:00
@bwangel 呃,上面解释过了,不是容器内。
用户是不会关心你容器里是什么的,说的是宿主机上打命令。
他关心的是他服务器安全
bwangel
2021-05-27 14:08:49 +08:00
@iblessyou 如果你能控制 dockerfile 的话,在 dockerfile 中指定以非 root 的用户运行 1 号进程,在宿主机上看到的进程也不会是 root 。

docker 不是虚拟机,容器内的账户和宿主机的账户系统是共享的,容器内是什么账户运行,宿主机上也是这个账户。
RexG
2021-07-06 16:16:29 +08:00
@bwangel 他说的感觉像是宿主机上的 docker 服务不要用 root 运行吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX