为什么我的docker守护进程作为一个任意的非docker用户来运行容器?

在Ubuntu机器上,发出一个工作的“docker运行”作为“docker”组的一部分的“应用程序”用户。

它启动的很好,但是在查看进程树时,它开始是另一个在我的系统上的任意用户“splunk”:

root 3573 0.1 0.6 337532 24216 ? Ssl 01:28 0:00 /usr/bin/docker daemon root 3678 1.0 0.3 177280 13132 ? Sl 01:30 0:00 \_ docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.1.2.3 -container-port 8080 splunk 3686 5.0 0.2 52144 10220 ? Ssl 01:30 0:00 \_ ruby /app/foo/build/bin/my_run_script splunk 3702 0.0 0.0 4440 656 ? S 01:30 0:00 \_ sh -c bundle exec unicorn -p $PORT -c config/unicorn.rb splunk 3703 76.0 1.6 301208 63684 ? Sl 01:30 0:03 \_ unicorn master -p 8080 -c config/unicorn.rb 

我明白,发出'docker运行'命令作为'应用程序'用户只是指示守护进程什么脚本开始在一个特定的图像。 守护进程(以root身份运行)然后将作为另一个用户运行进程。 我希望这是发行的“应用程序”用户,而不是一些其他的随机用户。

为什么会这样呢? 我检查了两个用户的UID是不同的。

所以不一定, Dockerfile对于你正在运行的容器是什么样的? 这是Dockerfile RUN命令的一个例子,它将以不同的用户身份运行:

 /bin/su -c 'ruby /app/foo/build/bin/my_run_script' someuser 

或者你可以像这样运行你的容器:

 docker run -u="myuser" mycontainer "ruby /app/foo/build/bin/my_run_script" 

更多信息在这里

您正在使用的容器很可能是用USER指令创build的,并设置为splunkuid

更多信息在这里