docker 从Java8无代理映像获取非根UID/GID

6qftjkof  于 2022-11-03  发布在  Docker
关注(0)|答案(1)|浏览(120)

我想在nonroot用户(用户名已经存在)下运行Java映像中的容器:gcr.io/distroless/java:8。此用户已存在于映像中,我已向Dockerfile添加了一个命令:
USER nonroot
现在我想把它添加到K8s清单文件中,它只需要UID/GID(而不是字面的用户名):

securityContext:
    runAsUser: <USER_ID>
    runAsGroup: <GROUP_ID>
    runAsNonRoot: true

因此,问题是如何从无失真映像(内部没有shell)中获取nonroot用户ID和组ID?
如果我不向manifest文件添加任何内容,容器将以用户nonroot开始(在日志中可以看到),这是否意味着不再使用该root用户(这足以保证容器的安全性)?

ee7vknir

ee7vknir1#

如果不向Kubernetes清单添加任何内容,容器将以Dockerfile中声明的USER运行。除非您特别需要强制容器以其他用户ID运行,否则这样做可能没问题。

securityContext:
  runAsNonRoot: true
  # but don't usually need to specific specific uid/gid

一个设计良好的映像也能够容忍以任意用户的身份运行。如果它根本不写文件,或者只写全局可写的目录(如/tmp)和它特别希望从容器外部挂载的存储目录,那么数字用户ID是否“存在”于容器内部并不重要,您可以在这里选择任何您想要的用户ID。

securityContext:
  runAsUser: 9876  # or anything else that's not 0
  runAsGroup: 9876

相关问题