我拉动并运行了Docker容器jcsilva/docker-kaldi-gstreamer-server:
docker pull jcsilva/docker-kaldi-gstreamer-server
docker run -it -p 8080:80 -v /media/kaldi_models:/opt/models jcsilva/docker-kaldi-gstreamer-server:latest /bin/bash
我可以看到它正在运行:
username@server:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24f598fd5019 jcsilva/docker-kaldi-gstreamer-server:latest "/bin/bash" 12 hours ago Up 12 hours 0.0.0.0:8080->80/tcp
当我检查它时:
username@server:~$ docker inspect 24f598fd501911f32e10884ed3f86547e05a031f0d31324badc40c5fb5ed732a > inspection.json
我在inspection.json
:
"Config": {
"Hostname": "24f598fd5019",
"Domainname": "",
"User": "", <-- Why is User an empty string?
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"80/tcp": {}
},
可以解释Config.User是一个空字符串吗?
我使用Docker版本18.03.0-ce,在Ubuntu 16.04.4 LTS(GNU / Linux 4.4.0-119-generic x86_64)上构建0520e24。
答案 0 :(得分:1)
因为Dockerfile
没有USER
指令,所以很有可能。你为什么期望它有一个?
在我的电脑上运行的所有容器中,只有一个拥有一个用户,那是grafana
,因为这就是Dockerfile中的内容。发起它的不是用户(我:roger
)。
答案 1 :(得分:1)
据我所知,docker inspect
仅显示
容器开始于。
由于诸如entrypoint
(或任何初始化脚本)之类的命令可能会更改用户,因此这些更改不会反映在docker inspect
输出中。
要解决此问题,您可以使用
--entrypoint=""
覆盖图像设置的默认入口点,并在其后指定一个命令,例如whoami
或id
。
您的情况:
docker container run --rm --entrypoint "" jcsilva/docker-kaldi-gstreamer-server whoami
您可以看到您指定图像的输出是root
用户。
在here中了解有关entrypoint ""
的更多信息。