/
linux_container.go
51 lines (42 loc) · 995 Bytes
/
linux_container.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package util
import (
"os"
"path/filepath"
"strings"
)
func ToLinuxContainerPath(path string) string {
return filepath.ToSlash(
strings.TrimPrefix(
path,
filepath.VolumeName(path),
),
)
}
func IsInContainer() bool {
werfContainerized := GetBoolEnvironment("WERF_CONTAINERIZED")
if werfContainerized != nil {
return *werfContainerized
}
// Docker-daemon
if isInContainer, err := RegularFileExists("/.dockerenv"); err == nil && isInContainer {
return true
}
// Podman, CRI-O
if isInContainer, err := RegularFileExists("/run/.containerenv"); err == nil && isInContainer {
return true
}
cgroupsData, err := os.ReadFile("/proc/1/cgroup")
if err != nil {
return false
}
// containerd without Docker-daemon
if strings.Contains(string(cgroupsData), "/cri-containerd-") ||
strings.Contains(string(cgroupsData), "/containerd") {
return true
}
// If in Kubernetes
if strings.Contains(string(cgroupsData), "/kubepods") {
return true
}
return false
}