如何以非root用户身份运行官方Tensorflow Docker镜像?

时间:2017-12-18 09:24:07

标签: docker tensorflow deep-learning dockerfile

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

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

让我们说我的主机与用户一起运行" CNNareCute ",有没有办法用同一个用户启动我的容器?

2 个答案:

答案 0 :(得分:1)

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

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

您可以将命令和ssh作为特定用户运行到容器中,前提是它存在于容器中。例如,需要运行保留docker exec --user www-data application_container_1 sh -c "php something"权限的命令的PHP应用程序将按如下方式运行:

from tweepy import Stream from service.twitter.listener.tweety_listener import TweetyStreamDataListener from settings import twitter_config class Tweety(object): def __init__(self, listener=TweetyStreamDataListener()): self.listener = listener self.__auth__ = None def __authenticate__(self): from tweepy import OAuthHandler if self.__auth__ is None: self.__auth__ = OAuthHandler(twitter_config['consumer_key'], twitter_config['consumer_secret']) self.__auth__.set_access_token(twitter_config['access_token'], twitter_config['access_token_secret']) return self.__auth__ is not None def __streamer__(self): is_authenticated = self.__authenticate__() if is_authenticated: return Stream(self.__auth__, self.listener) return None def filter(self, keywords=None, async=True): streamer = self.__streamer__() try: print "[STREAM] Started steam" streamer.filter(track=keywords, async=async) except Exception as ex: print "[STREAM] Stream stopped! Reconnecting to twitter stream" print ex.message, ex.args self.filter(keywords=keywords, async=async)

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

答案 1 :(得分:1)

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

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