You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:16:11