Intelligente Lösungen
in neuer Dimension

Container-Erkennung

Manchmal muß eines meiner Skripte erkennen können, ob es innerhalb eines Containers läuft. Dafür gibt es viele Rezepte, die bei mir nicht funktioniert haben. Eines klappt dann aber doch!

Funktionierende Container-Erkennung

Bei mir funktioniert die Containererkennung auf Basis von Prozess-ID 2 am besten. Die Prozess-ID 2 ist bei Containern zufällig belegt oder existiert nicht. Außerhalb von Containern ist die reserviert für den Prozess “kthreadd”.

Nachfolgendes Skript überprüft Prozess-ID 2 und den Prozess “kthreadd” und meldet den Status:

1
2
3
4
5
6
7
if [ "$(cat /proc/2/comm 2>/dev/null)" = "kthreadd" ]; then
  # No container
  echo "Running on bare metal"
else
  # Within a container
  echo "Running within a container"
fi

Nicht funktionierende Varianten

  • /proc/1/sched … sieht innerhalb und außerhalb identisch aus
  • /proc/1/cgroup … sieht innerhalb und außerhalb identisch aus

Links

Historie

  • 2024-01-17 – Erste Version