Docker:unix" who"命令不在容器

时间:2016-08-22 07:58:40

标签: unix docker

我有一个Docker镜像,其中有一个非root用户创建了名为builder。

应该在容器内运行的应用程序使用unix who命令。

由于某种原因,它在容器内返回空字符串:

builder@2dc3831c558b:~$ who
builder@2dc3831c558b:~$

由于实施细节,我无法使用whoami

(我在Debian Jessie上使用Docker 1.6.2)

编辑(关于我为何使用"谁" 的其他详细信息:

我使用who命令和参数am i,即who am i。这假设返回首次登录的用户。因此,例如,sudo who am i会返回builder,而sudo whoami会返回root

1 个答案:

答案 0 :(得分:2)

command who包含-b:上次系统启动时间等选项。

由于容器中的所有命令都转换为对内核的系统调用,因此不会返回与容器相关的任何内容,而是与docker-host相关(即底层主机)。

另请参阅" Difference between who and whoami commands":whoami打印有效的用户名whoami,这与用户名不同(打印有关用户的信息)目前已登录。)

issue 18547中列出的当前解决方法是:

  

注册表配置存储在客户端中,因此像cat ~/.docker/config.json这样简单的内容可以为您提供您正在寻找的答案。

     

docker info | grep Username应该为您提供此信息。

但这与在容器会话中运行命令不同。 id -u可能更接近。

默认情况下,docker守护程序启动容器时没有直接登录 作为Auzias commented,只有直接ssh连接(启动登录会话)才允许who返回任何内容。但是对于docker,这通常是不需要的,因为docker exec(出于调试目的)存在(并且除了需要 之外,还要保留图像维护者以包含ssh)。