【问题标题】:How to run Docker commands as non-root user in Docker in Docker?如何在 Docker 中以非 root 用户身份运行 Docker 命令?
【发布时间】:2016-07-09 08:15:56
【问题描述】:

我有以下 Dockerfile:

FROM docker

RUN addgroup docker && \
    adduser -DH demo && \
    addgroup demo docker

CMD /bin/sh

在这张图片中,我正在创建一个名为 demo 的用户,然后将其添加到一个名为 docker 的组中。这几乎就是如何设置完整的环境,以便非 root/非 sudo 用户可以发出 docker 命令。但是,它对我不起作用。我错过了什么?我尝试将用户和组(通过用户和组 ID)映射到主机系统上的用户,但它仍然不起作用。我在 Docker for Mac Beta (1.12.0-rc3-beta18) 中运行它。

【问题讨论】:

  • 你错过了很多。如果您想以用户身份在容器中运行应用程序,请使用: USER myuser 但听起来您希望在 docker 中有一个用户,存在于主机上的组中,并管理主机 docker。如果你想让一个 docker 容器能够控制宿主 docker 实例……你需要使用 docker API。
  • @Psycho Punch 想在这里详细说明您的用例吗?主机系统不会知道容器内的用户。据我所知,容器与主机是隔离的。即container.root != host.root用户。如果我错了,请纠正我。
  • @SamuelToh 这是一个实验的一部分,希望能够在 Docker 容器内建立一个持续集成环境,但能够创建同级容器。我并不是真的想映射主机用户;这只是一个探索性的步骤。
  • @user2105103 就像我之前说的,我不打算将主机用户映射到容器用户。但是,我希望容器能够管理主机的部分是正确的。
  • @PsychoPunch 我明白你的意思了。不幸的是,我没有在另一个容器中嵌套容器的经验。我尝试使用像nested container docker 这样的关键词在谷歌上搜索你,结果前几页通常是“这是一个不好的做法”。见链接。 jpetazzo.github.io/2015/09/03/… 可能值得研究

标签: docker


【解决方案1】:

这是对问题评论的扩展。

所以 OP 的用例是通过使用 docker within docker 架构来调查持续集成环境,或者如果您愿意,也可以采用方法。

来自 docker 为 nested containers 发布的官方博客,是的 但是,正如 jpetazzo 进一步解释的那样,嵌套容器概念的先驱贡献者进一步解释了这一点;为了使架构正常工作,可能需要大量的 hackie 工作,因为嵌套架构并不完美,主要是由于以下缺点;

示例:

1 - 安全配置文件

启动容器时,“内部 Docker”可能会尝试应用 会与“外部 Docker”发生冲突或混淆的安全配置文件。

2 - 存储

第二个问题与存储驱动程序有关。当你运行 Docker 时 Docker,外部 Docker 运行在普通文件系统之上(EXT4, BTRFS,你有什么)但内部 Docker 运行在一个 写时复制系统(AUFS、BTRFS、设备映射器等,取决于 外部 Docker 设置使用什么)。有很多组合 那行不通。 2 3 - 难以在子容器中重用图像

那么构建缓存呢?那个也可以变得相当棘手。 人们经常问我,“我正在运行 Docker-in-Docker;我该如何使用 图片位于我的主机上,而不是再次将所有内容都拉到我的主机上 内部 Docker?”

Q)可能解决这个问题?

答:我猜 OP 尝试嵌套容器架构的原因是为了让他可以使用容器,作为某种形式的 root,然后通过 docker 命令编排其子容器?

如果是这样的话,那么这仍然可以通过标准的非嵌套方式来实现。也就是说,您无需将 docker 命令沿流发送,而是将其发送回主机实例,并让主机实例代替根容器为您执行命令。例子;使用 docker REST api 从容器发送 docker 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多