当我检查Docker容器时,Config.User是一个空字符串?

时间:2018-05-27 18:09:44

标签: docker

我拉动并运行了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。

2 个答案:

答案 0 :(得分:1)

因为Dockerfile没有USER指令,所以很有可能。你为什么期望它有一个?

在我的电脑上运行的所有容器中,只有一个拥有一个用户,那是grafana,因为这就是Dockerfile中的内容。发起它的不是用户(我:roger)。

答案 1 :(得分:1)

据我所知,docker inspect仅显示 容器开始于。

由于诸如entrypoint(或任何初始化脚本)之类的命令可能会更改用户,因此这些更改不会反映在docker inspect输出中。

要解决此问题,您可以使用
--entrypoint=""覆盖图像设置的默认入口点,并在其后指定一个命令,例如whoamiid

您的情况:

docker container run --rm --entrypoint "" jcsilva/docker-kaldi-gstreamer-server whoami

您可以看到您指定图像的输出是root用户。

here中了解有关entrypoint ""的更多信息。