当前位置: 首页 > 知识库问答 >
问题:

Dockerfile中“user”定义的GID在Pod的容器中不起作用

司徒良哲
2023-03-14

发生了什么:在Dockerfile中添加“user 999:999”,将默认的uid和gid添加到容器映像中,然后在Pod中启动容器,它的uid是999,但是gid是0。

在Docker启动的容器中,ID正确

docker run --entrypoint /bin/bash -it test

bash-5.0$ id
uid=9999 gid=9999 groups=9999

但以Pod开始时,gid为0

kubectl exec -it test /bin/bash
bash-5.0$ id
uid=9999 gid=0(root) groups=0(root)
bash-5.0$

bash-5.0$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin 
systemd-coredump:x:200:200:systemd Core Dumper:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

如果Dockerfile运行额外的“useradd”命令,那么Pod中的gid似乎是正常的

RUN useradd -r -u 9999 -d /dev/null -s /sbin/nologin abc 
USER 9999:9999 

则Pod容器中的ID与Dockerfile中设置的ID相同

bash-5.0$ id uid=9999(abc) gid=9999(abc) groups=9999(abc) 
apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
    - name: test
      image: test
      imagePullPolicy: Never
      command: ["/bin/sh", "-c", "trap : TERM INT; sleep infinity & wait"]
Kubernetes version (use kubectl version):
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:07:13Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}

OS (e.g: cat /etc/os-release): Fedora release 30 (Thirty)

共有1个答案

刘奇
2023-03-14

我意识到这不是您所要求的,但是由于我不知道为什么user指令没有被执行,所以我将指出,您通过securitycontext:对Pod使用的UID和GID有显式的影响

spec:
  securityContext:
    runAsUser: 999
    runAsGroup: 999
  containers:
  - ...
 类似资料:
  • 问题内容: 我的Dockerfile创建一个目录,将其chown,然后再列出该目录。该目录仍归root用户所有。这是为什么? 这是Dockerfile: 这是“ docker build”的输出: Docker版本1.2.0,构建fa7b24f 主机运行Ubuntu 12.04,但具有3.13.0-36通用内核。 问题答案: 回答我自己的问题:它声明为卷。如果取出VOLUME指令,则将生效。 此外

  • 问题内容: 情境 我正在尝试基于公共continuumio / anaconda3 容器设置一个简单的docker映像( 对于docker我是一个新手,所以请更正我可能的误解 )。 的: 以此结束建筑物和图像,并显示以下错误: 激活新的虚拟环境时。 建议1: 按照这个答案,我尝试了: 乍一看,这似乎很有效,因为它输出:,但屁股清楚地表明它没有: docker文件作为MWE开箱即用。我感谢任何想法。

  • 我正在尝试基于公共Continuumio/Anaconda3容器设置一个简单的docker映像(我对docker相当陌生,所以请纠正我可能的错误认识)。 : 这似乎一开始起作用,因为它输出:,但是以及ass清楚地显示它不: docker文件作为一个MWE开箱即用。我很感激任何想法。谢谢!

  • 问题内容: 我想在页脚元素的右边放置文本(foo链接)。 我需要保留页脚显示。 但是当我将其设置为时,span不再起作用。 问题答案: 该属性在flex容器中被忽略。 根据flexbox规范: 3. Flex容器:和显示值 一个伸缩容器为其内容建立一个新的_伸缩格式上下文_。这与建立块格式化上下文相同,除了使用Flex布局而不是块布局。 例如,浮点数不会侵入flex容器,并且flex容器的边距不会

  • 在 CentOS VM 上安装最新的 OpenShift CodeReady 容器,然后在 OpenShift 上运行由 Java 编写的 TCP 服务器应用程序。TCP 服务器正在侦听端口 7777。 运行app,用NodePort将其公开为服务,看起来一切运行良好。pod端口是7777,服务端口是31777。 然后获取节点ip,命令显示为192.168.130.11,我可以在我的虚拟机上成功p

  • 问题内容: 我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。 之后,我可以使用SSH在容器内进行SSH 。可以正常工作,但似乎不起作用。它已正确启动,控制台中没有错误。但是,如果我访问(我将端口4200映射到80),则不会加载任何内容。 我想念什么吗? 问题答案: 在您的Dockerfile中,您缺少Expose行,例如: 尝试将其放在d