diff --git a/proc/proc.go b/proc/proc.go index f2357ca..0d844d3 100644 --- a/proc/proc.go +++ b/proc/proc.go @@ -150,6 +150,12 @@ func GetContainerRuntime(tgid, pid int) ContainerRuntime { return runtime } + // Check for container specific files + runtime = detectContainerFiles() + if runtime != RuntimeNotFound { + return runtime + } + return RuntimeNotFound } @@ -167,6 +173,23 @@ func getContainerRuntime(input string) ContainerRuntime { return RuntimeNotFound } +// Related implementation: https://github.com/systemd/systemd/blob/6604fb0207ee10e8dc05d67f6fe45de0b193b5c4/src/basic/virt.c#L523-L549 +func detectContainerFiles() ContainerRuntime { + files := map[ContainerRuntime]string{} + // https://github.com/containers/podman/issues/3586#issuecomment-661918679 + files[RuntimePodman] = "/run/.containerenv" + // https://github.com/moby/moby/issues/18355 + files[RuntimeDocker] = "/.dockerenv" + + for runtime, file := range files { + if fileExists(file) { + return runtime + } + } + + return RuntimeNotFound +} + // GetContainerID returns the container ID for a process if it's running in a container. // If pid is less than one, it returns the container ID for "self". func GetContainerID(tgid, pid int) string {