我有一个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
。
答案 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)。