====== Container untersuchen ====== Container starten, der untersucht werden soll: docker container run --rm -d -P --name whoami containous/whoami ===== weiteres Terminal im Container starten ===== geht nur, wenn der Container auch eine Shell enthält docker container exec -it whoami bash ===== Dateisystem des Containers untersuchen ===== Docker bietet verschiedene Storage-Backends, der Default hat auch mal gewechselt. Storage-Backend anzeigen: docker info -f '{{ .DriverStatus }}' Eine Auswahl möglicher Ergebnisse: * ''[[driver-type io.containerd.snapshotter.v1]]'' ++ Dateisystem finden | (( mit jq:/ id=$(docker inspect whoami | jq -r '.[].Id') )) id=$(docker inspect --format='{{.Id}}' whoami) sudo jq -r '.root.path' /run/containerd/io.containerd.runtime.v2.task/moby/$id/config.json -> gibt das Verzeichnis aus ++ * ''[[Backing Filesystem extfs] [Supports d_type true] [Using metacopy false] [Native Overlay Diff true] [userxattr false]]'' ++ Dateisystem finden | docker inspect --format '{{.GraphDriver.Data.MergedDir}}' whoami -> gibt das Verzeichnis aus ++ ===== kurzlebige Diagnose Container zur Untersuchung eines anderen Containers ===== Neuen Container starten, der die selben Netzwerk- , IPC- und PID-Namespaces teilt:(( TODO: docker debug whoami )) container_root=$(docker inspect --format '{{.GraphDriver.Data.MergedDir}}' whoami) docker run --rm -it \ --network=container:whoami \ --ipc=container:whoami \ --pid=container:whoami \ -v $container_root:/container_root \ --cap-add=SYS_PTRACE debian bash Ungefähr dasselbe, mit nsenter: (( geht nicht mit podman )) nsenter --target $(docker inspect --format '{{.State.Pid}}' whoami) --net --pid --ipc --mount