web-dev-qa-db-fra.com

CoreOS - Obtenir le nom du conteneur de menu fixe par PID?

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?

12
Nimrod007

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.

14
ivant

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/^\///'
2
Jay Taylor

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"
0
Mitar