为何ps -elf显示MySQL容器进程用户为systemd+?/etc/passwd无该用户
问题原因解析
这是Docker进程特性与ps工具显示逻辑共同作用的结果,拆解如下:
容器进程复用宿主机PID命名空间,使用容器内的UID运行
MySQL官方Docker镜像默认会创建一个mysql用户(容器内的/etc/passwd中该用户的UID为999),并以这个用户身份启动MySQL进程。由于Docker容器的进程在宿主机的PID命名空间中可见,宿主机的ps命令能看到该进程,但进程携带的UID是容器内的999,而非宿主机本地用户的UID。宿主机无对应UID的用户条目
你的Ubuntu 20.04宿主机的/etc/passwd文件中未注册UID为999的用户,因此ps无法通过UID映射到具体的用户名。ps工具的 fallback 显示逻辑ps -elf的USER列在无法解析UID到具体用户名时,针对系统级UID(通常指小于1000的UID),会用systemd+作为占位符显示——这是ps的内置行为,用来标识该UID属于系统用户范围,但本地无对应用户记录。而ps -el仅输出UID数字,所以直接显示999。
内容的提问来源于stack exchange,提问作者stackflow-crystal
相关产品推荐
相关产品推荐

