我可以使用docker ps或等量 docker container ls查看正在运行的容器列表(添加在Docker1.13中)。但是,它不显示启动每个Docker容器的用户。如何查看哪个用户启动了一个Docker容器?理想情况下,我更愿意拥有运行容器的列表,以及启动每个容器的用户。
发布于 2018-05-27 07:17:54
你可以试试这个;
docker inspect $(docker ps -q) --format '{{.Config.User}} {{.Name}}'编辑:添加到输出中的容器名称
发布于 2021-07-23 21:12:07
做这件事是没有办法的。
您可以通过检查容器中的.Config.User字段,检查容器中的应用程序是否被配置为运行,如果为空,默认为uid 0 (root)。但这并不能告诉您是谁运行启动容器的docker命令。访问docker的用户bob可以以任何uid的形式运行容器(这是以uid 1234形式运行的docker run -u 1234 some-image选项)。无论启动容器的用户是谁,大多数没有经过强化的映像都将默认为root运行。
要理解为什么,请认识到docker是一个客户机/服务器应用程序,服务器可以以不同的方式接收连接。默认情况下,此服务器以根用户身份运行,用户可以提交任何配置的请求。这些请求可能是通过unix套接字进行的,您可以通过root连接到该套接字,您可以将API公开到网络(不推荐),或者您可能在docker顶部有另一层工具(例如,带有docker-shim的Kubernetes )。这个列表中的最大问题是网络请求与unix套接字之间的区别,因为网络请求不会告诉您是谁在远程主机上运行,如果是这样,您将信任远程客户端提供准确的信息。而且,由于API是文档化的,任何拥有curl命令的人都可以提交一个请求,声称自己是不同的用户。
简而言之,每个访问 API的用户都是主机上的匿名根用户。。
你能得到的最接近的东西是在码头前放置一些东西来验证用户的身份并填充类似标签的东西。或者信任用户填充该标签并诚实地(因为docker没有对这些设置进行验证)。
$ docker run -l "user=$(id -u)" -d --rm --name test-label busybox tail -f /dev/null
...
$ docker container inspect test-label --format '{{ .Config.Labels.user }}'
1000除此之外,如果您有一个已部署的容器,有时您可以通过查看配置并找到返回到该用户主目录的卷映射来推断用户。这给了您很大的可能性,但也不是保证,因为任何用户都可以设置任何卷。
发布于 2021-07-23 20:34:53
我找到了解决办法。这并不完美,但对我来说很管用。
我用一个环境变量(在我的例子中是$CONTAINER_OWNER)启动我的所有容器,其中包括用户。然后,我可以用环境变量列出容器。
带有环境变量的启动容器
docker run -e CONTAINER_OWNER=$(whoami) MY_CONTAINER启动对接器与环境变量组合
echo "CONTAINER_OWNER=$(whoami)" > deployment.env # Create env file
docker-compose --env-file deployment.env up具有环境变量的列表容器
for container_id in $(docker container ls -q); do
echo $container_id $(docker exec $container_id bash -c 'echo "$CONTAINER_OWNER"')
donehttps://stackoverflow.com/questions/50549356
复制相似问题