Docker容器中who命令无输出问题的排查与解决求助
Docker容器中
who命令无输出的原因及解决办法 首先得明确who命令的工作逻辑——它读取的是/var/run/utmp文件,这个文件记录的是系统中当前活跃的登录会话。而Docker容器里的进程通常是直接启动的(比如通过docker-compose拉起的服务进程),并没有经过传统的login登录流程,所以utmp里根本没有对应的会话条目,这就是who命令无输出的核心原因,和你配置的UID是否在/etc/passwd中无关。
再拆解你遇到的细节:
- 最初
whoami报错,是因为容器内/etc/passwd没有UID 95230对应的用户条目,手动添加后whoami能正常显示用户名,这一步是对的——因为whoami是通过/etc/passwd映射UID到用户名的,和utmp文件无关。 - 但即使添加了用户条目,
who还是无输出,本质还是没有登录会话被记录到utmp里。
如果确实需要让who有输出,可以试试这几种方案:
方案1:模拟登录会话
用script命令创建伪登录会话,它会自动更新utmp文件。在容器内执行:script -q /dev/null执行后再运行
who,就能看到当前会话的条目了,退出时按Ctrl+D即可。方案2:用登录shell启动容器
如果你通过docker run或docker-compose启动容器,可以指定用登录shell启动,比如把命令改成bash -l,这样会触发登录流程并更新utmp。不过这种方法可能影响容器启动逻辑,需要结合你的实际场景调整。方案3:手动写入utmp条目
可以用utmpdump工具编辑/var/run/utmp,但这种操作复杂,且容器重启后会丢失,不推荐在生产环境使用。
最后要提醒:Docker容器里who无输出其实是正常场景,因为容器设计初衷是只运行必要进程,不需要完整的登录会话。如果你的业务逻辑不是必须依赖who的输出,其实不需要特意解决这个问题。
内容的提问来源于stack exchange,提问作者Murali Mopuru
相关产品推荐
相关产品推荐

