【问题标题】:How to run official Tensorflow Docker Image as a non root user?如何以非 root 用户身份运行官方 Tensorflow Docker Image?
【发布时间】:2017-12-18 09:24:06
【问题描述】:

我目前使用 Nvidia-Docker 运行官方的 Tensorflow Docker 容器 (GPU):

但是,我找不到为容器设置默认用户的方法。此容器的默认用户是“root”,这在安全性方面是危险的并且存在问题,因为它提供了对共享文件夹的root访问权限。

假设我的主机使用用户“CNNareCute”运行,有什么方法可以使用同一用户启动我的容器?

【问题讨论】:

    标签: docker tensorflow deep-learning dockerfile


    【解决方案1】:

    Docker 容器默认以root 运行。您可以通过将--user <user> 传递给 docker run 命令来覆盖用户。但是请注意,如果容器进程需要容器内的 root 访问权限,这可能会出现问题。

    您提到的安全问题是在 docker 中使用 User Namespaces 处理的。用户名空间基本上将容器中的用户映射到主机上的不同用户池。因此,您可以将容器内的 root 用户映射到主机上的普通用户,并且应该减轻安全问题。

    【讨论】:

    • 用户命名空间似乎完美地满足了我的需求,您知道如何将“root”映射到“CNNareCute”用户吗?
    • 网上有很多教程如success.docker.com/article/…jujens.eu/posts/en/2017/Jul/02/docker-userns-remap。基本上,重新映射是在范围上完成的,因此使用 cat /etc/passwd 找到用户 CNNareCute 的 uid 并将其指定为 /etc/subuid 中的范围的开始,例如:USER:<id of CNNareCute >:65536。这样容器(根)中的用户 0 将映射到主机上的 CNNareCute 用户
    【解决方案2】:

    AFAIK,docker 镜像默认以 root 身份运行。这意味着任何使用映像作为基础的 Dockerfile 都不必费劲地修改它。您可以在 Dockerfile 中进行用户修改 - 就像在任何其他 linux 机器上一样,它会为您提供所需的配置。

    如果不先在容器中创建用户,您将无法(动态地)在容器中使用主机中的用户 - 他们实际上将是同名的不同用户。

    只要容器上存在特定用户,您就可以将命令和 ssh 运行到容器中。例如,需要运行保留www-data 权限的命令的 PHP 应用程序将按如下方式运行:

    docker exec --user www-data application_container_1 sh -c "php something"

    因此,简而言之,您可以设置您喜欢的任何用户并使用它们来运行脚本,但默认为 root 并且除非您将其删除,否则它将存在,这也可能会产生影响...

    【讨论】:

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