为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
萧十郎 2021-08-23 17:43:46
我不想以 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这是我的 dockerfileFROM scratchADD lichtpunkt_go_linux_amd64 /lichtpunkt_go_linux_amd64ADD web /webUSER nobodyCMD ["./lichtpunkt_go_linux_amd64"]EXPOSE 3001编辑 -----原来,scratch 是空的,非常空。RUN useradd 会执行 /bin/sh -c useradd 但没有 /bin/sh 。RUN ["useradd"] 将直接执行。但没有用户添加。id 必须添加 rootfs.tar 并从零开始构建东西。我将使用 debian,因为我不会在容器中以 root 身份运行任何东西,因为...
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

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


查看完整回答
反对 回复 2021-08-23
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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


查看完整回答
反对 回复 2021-08-23
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

创建一个包含以下内容的文件并将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


查看完整回答
反对 回复 2021-08-23
  • 3 回答
  • 0 关注
  • 439 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信