2017-12-18 270 views
0

我目前正在与NVIDIA技术的码头工人运行官Tensorflow泊坞集装箱(GPU):如何以非root用户身份运行官方Tensorflow Docker镜像?

不过,我不能找到一种方法来设置默认为用户集装箱。此容器的默认用户是“root”,这在安全性方面很危险,并且存在问题,因为它允许根访问共享文件夹

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

回答

1

默认情况下的码头集装箱运行为root。您可以通过将--user <user>传递给docker run命令来覆盖用户。但是请注意,如果容器进程需要在容器中进行根访问,这可能会产生问题。

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

+0

用户命名空间似乎完美地回答了我的需求,您对如何将“root”映射到“CNNareCute”用户有任何想法吗? –

+1

网上有很多教程,例如https://success.docker.com/article/Introduction_to_User_Namespaces_in_Docker_Engine和https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/。基本上,重新映射是在范围内完成的,所以使用'cat/etc/passwd'找到用户'CNNareCute'的uid,并在'/ etc/subuid'例子中指定范围的开始:'USER::65536'。这样,容器(root)中的用户0将映射到主机上的CNNareCute用户 – yamenk

1

AFAIK,docker映像默认作为root运行。这意味着任何使用图像作为基础的Dockerfile,都不必跳过修改它。您可以在Dockerfile中执行用户修改 - 就像您在任何其他可以给您所需的配置的Linux机器上一样。

您将无法在容器中使用容器中的主机(动态)用户,而无需先在容器中创建它们 - 而且它们实际上是具有相同名称的单独用户。

您可以将容器中的命令和ssh作为特定用户运行,只要它存在于容器中即可。

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

因此,在短期,你可以设置你喜欢的任何用户,并利用它们来运行脚本,但默认的:例如,一个PHP应用程序需要保留www-data权限运行的命令,将运行如下将是根,它将存在,除非你删除它,这也可能会产生影响...

相关问题