猿问

我如何以用户“nobody”的身份在临时容器中运行我的 Go 应用程序?

我不想以 root 身份在 docker 容器中运行任何东西。我想要简约的图像。


我可以毫无问题地在临时映像中运行我编译的 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

编辑 -----


原来,scratch 是空的,非常空。


RUN useradd 会执行 /bin/sh -c useradd 但没有 /bin/sh 。RUN ["useradd"] 将直接执行。但没有用户添加。id 必须添加 rootfs.tar 并从零开始构建东西。


我将使用 debian,因为我不会在容器中以 root 身份运行任何东西,因为...


萧十郎
浏览 441回答 3
3回答

拉风的咖菲猫

在USER命令之前,添加以下行: ADD passwd.minimal /etc/passwd在文件 passwd.minimal 中使用以下行: nobody:x:65534:65534:Nobody:/:

白衣染霜花

解决方案是使用多阶段构建和复制/etc/passwd,如Liz Rice这篇不错的博客文章中所述。

一只甜甜圈

创建一个包含以下内容的文件并将COPY其scratch作为/etc/passwd.nobody:*:65534:65534:nobody:/_nonexistent:/bin/false你也可以COPY /bin/false;或者您不这样做,在这种情况下,尝试登录nobody只会失败。su: failed to execute /bin/false: No such file or directory
随时随地看视频慕课网APP

相关分类

Go
我要回答