簡體   English   中英

如何以用戶“nobody”的身份在臨時容器中運行我的 Go 應用程序?

[英]How do I run my Go application in the scratch container as the user "nobody?"

我不想以 root 身份在 docker 容器中運行任何東西。 我想要簡約的圖像。

我可以在 scratch-image 中毫無問題地運行我編譯的 Go 應用程序。 但是當我不希望它以 root 身份運行時(我假設它以 root 身份運行)並在 dockerfile 中定義 USER nobody 我得到

014/10/25 06:07:10 Error response from daemon: Cannot start container 
4822f34e54e20bb580f8cd1d38d7be3c828f28595c2bebad6d827a17b4c2fe21: 
finalize namespace setup user get supplementary groups Unable to find user nobody

這是我的 dockerfile

FROM scratch
ADD lichtpunkt_go_linux_amd64 /lichtpunkt_go_linux_amd64
ADD web /web
USER nobody
CMD ["./lichtpunkt_go_linux_amd64"]
EXPOSE 3001

編輯 - - - - - -

原來那個划痕是空的,非常空。

RUN useradd 將執行 /bin/sh -c useradd 但沒有 /bin/sh。 RUN ["useradd"] 會直接執行。 但是沒有用戶添加。 id 必須添加 rootfs.tar 並從零構建內容。

我將使用 debian,因為我不會在容器中以 root 身份運行任何東西,因為...

將容器內的根視為容器外的根

創建一個包含以下內容的文件,並將其作為/etc/passwd COPYscratch容器中。

nobody:*:65534:65534:nobody:/_nonexistent:/bin/false

您也可以COPY /bin/false 或者您不這樣做,在這種情況下,嘗試登錄,因為nobody會簡單地失敗。

su: failed to execute /bin/false: No such file or directory

在USER命令之前,添加以下行: ADD passwd.minimal /etc/passwd

使用文件passwd.minimal中的以下行: nobody:x:65534:65534:Nobody:/:

您仍然必須先添加用戶,然后才能將其與USER命令一起使用。

FROM scratch
ADD lichtpunkt_go_linux_amd64 /lichtpunkt_go_linux_amd64
ADD web /web
RUN useradd nobody
USER nobody
CMD ["./lichtpunkt_go_linux_amd64"]
EXPOSE 3001

事實證明,划痕是空的,非常空。

運行useradd會執行/ bin / sh -c useradd但沒有/ bin / sh。 RUN [“useradd”]將直接執行。 但是沒有useradd。 id必須添加rootfs.tar並從零開始構建東西。

我將使用debian,因為我不會在容器中以root身份運行任何東西,因為......

將容器中的根視為容器外的根

http://opensource.com/business/14/7/docker-security-selinux

解決方案是使用多階段構建和復制/etc/passwd ,正如Liz Rice在這篇很好的博客文章中所解釋的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM