J'ai une liste de PID et je dois obtenir leur nom de conteneur de menu fixe. Aller dans l'autre sens est facile ... obtenez le PID du conteneur de menu fixe par le nom de l'image
$ docker inspect --format '{{.State.Pid}}' {SOME DOCKER NAME}
Une idée de comment obtenir le nom par PID?
Quelque chose comme ça?
$ docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.ID}}' | grep "^${PID},"
[MODIFIER]
Disclaimer Ceci est pour Linux "normal". Je ne sais rien d’utile à propos de CoreOS, donc cela peut ne pas fonctionner ici.
Parce que la suggestion de commentaire de @ Mitar mérite une réponse complète:
Pour obtenir un ID de conteneur, vous pouvez utiliser:
cat /proc/<process-pid>/cgroup
Ensuite, pour convertir l'ID de conteneur en nom de conteneur dans le menu fixe:
docker inspect --format '{{.Name}}' "${containerId}" | sed 's/^\///'
J'utilise le script suivant pour obtenir le nom du conteneur pour n'importe quel PID d'hôte d'un processus à l'intérieur d'un conteneur:
#!/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"