2017-12-18 272 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權限運行的命令,將運行如下將是根,它將存在,除非你刪除它,這也可能會產生影響...

相關問題