V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iblessyou
V2EX  ›  Docker

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

  •  
  •   iblessyou · 2021-05-24 16:57:56 +08:00 · 2662 次点击
    这是一个创建于 1277 天前的主题,其中的信息可能已经有所发展或是发生改变。

    遇到的问题: 接到客户提的一个要求,使用 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 版本。

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

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

    docker 不是虚拟机,容器内的账户和宿主机的账户系统是共享的,容器内是什么账户运行,宿主机上也是这个账户。
    RexG
        15
    RexG  
       2021-07-06 16:16:29 +08:00
    @bwangel 他说的感觉像是宿主机上的 docker 服务不要用 root 运行吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5199 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:49 · PVG 13:49 · LAX 21:49 · JFK 00:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.