Linux CoreOS-通过PID获取docker容器名称?
我有一个PID的列表,我需要得到他们的docker容器名称。往另一个方向走很容易。。。按图像名称获取docker容器的PID:Linux CoreOS-通过PID获取docker容器名称?,linux,bash,docker,coreos,nsenter,Linux,Bash,Docker,Coreos,Nsenter,我有一个PID的列表,我需要得到他们的docker容器名称。往另一个方向走很容易。。。按图像名称获取docker容器的PID: $ docker inspect --format '{{.State.Pid}}' {SOME DOCKER NAME} 知道如何通过PID来获取名称吗?类似这样的东西 $ docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.ID}}' | grep "^${PID}," [编辑] 免责
$ docker inspect --format '{{.State.Pid}}' {SOME DOCKER NAME}
知道如何通过PID来获取名称吗?类似这样的东西
$ docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.ID}}' | grep "^${PID},"
[编辑]
免责声明这是针对“普通”linux的。我不知道关于CoreOS的任何有用的东西,所以这可能在那里起作用,也可能不起作用
我使用以下脚本获取容器中进程的任何主机PID的容器名称:
#!/bin/bash -e
# Prints the name of the container inside which the process with a PID on the host is.
function getName {
local pid="$1"
if [[ -z "$pid" ]]; then
echo "Missing host PID argument."
exit 1
fi
if [ "$pid" -eq "1" ]; then
echo "Unable to resolve host PID to a container name."
exit 2
fi
# ps returns values potentially padded with spaces, so we pass them as they are without quoting.
local parentPid="$(ps -o ppid= -p $pid)"
local containerId="$(ps -o args= -f -p $parentPid | grep docker-containerd-shim | cut -d ' ' -f 2)"
if [[ -n "$containerId" ]]; then
local containerName="$(docker inspect --format '{{.Name}}' "$containerId" | sed 's/^\///')"
if [[ -n "$containerName" ]]; then
echo "$containerName"
else
echo "$containerId"
fi
else
getName "$parentPid"
fi
}
getName "$1"
因为@Mitar的评论建议应该是一个完整的答案: 要获取容器ID,您可以使用:
cat /proc/<process-pid>/cgroup
。。。作为一个单一的班轮
PID=20168;sudo docker ps--no trunc | grep$(cat/proc/$PID/cgroup | grep-oE'[0-9a-f]{64}head-1)| sed's/^.*/'
如果只需要docker name就可以在最后添加| awk'{print$2}感谢我当前的docker版本,我不得不将{.ID}改为{.ID},似乎docker inspect的输出略有改变!grep正则表达式中的${PID}
是什么?我刚试过这个,但grep不起作用。@wheeler,这是你要找的PID。例如,如果要查找PID 123,则可以在运行上述命令之前导出PID=123。或者您可以将${PID}
替换为123
。您使用的是哪个版本的Docker?您还可以使用cat/proc//cgroup
获取容器ID,然后使用Docker inspect--format'{.Name}'$containerId“| sed's/^\/'
从ID获取名称。作为一行,使用@Mitar的想法:docker inspect--format'{.Name}'$(cat/proc/$PID/cgroup | head-n1 | cut-d/-f3)“| sed's/^\/'
或更短的PID=20168;sudo docker ps——没有trunc | grep$(grep-oE'[0-9a-f]{64}'/proc/$PID/cgroup | head-1)| sed's/^.*/'甚至更快:)sudo docker ps——没有trunc | grep$(head-1/proc/$PID/cgroup | grep-oE'[0-9a-f]{64})| sed的/^.*/'一点解释:--no trunc在64位哈希中显示容器id,该哈希仅包含从“a”到“f”grep-oE“[0-9a-f]{64}”greps的数字和字符,完全对应于64位哈希,并仅打印哈希。请不要将其他信息作为注释包含到您的答案中。相反,请在您的答案中包含此信息,使用。
docker inspect --format '{{.Name}}' "${containerId}" | sed 's/^\///'