123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package docker
- import (
- "bufio"
- "os"
- "regexp"
- "strings"
- )
- // GetContainerID retrieves the Docker container ID by parsing /proc/self/mountinfo
- func GetContainerID() (string, error) {
- // Open the mountinfo file
- file, err := os.Open("/proc/self/mountinfo")
- if err != nil {
- return "", err
- }
- defer file.Close()
- // Regular expression to extract container ID from paths like:
- // /var/lib/docker/containers/bd4bd482f7e28566389fe7e4ce6b168e93b372c3fc18091c37923588664ca950/resolv.conf
- containerIDPattern := regexp.MustCompile(`/var/lib/docker/containers/([a-f0-9]{64})/`)
- // Scan the file line by line
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- line := scanner.Text()
- // Look for container ID in the line
- if strings.Contains(line, "/var/lib/docker/containers/") {
- matches := containerIDPattern.FindStringSubmatch(line)
- if len(matches) >= 2 {
- return matches[1], nil
- }
- }
- }
- if err := scanner.Err(); err != nil {
- return "", err
- }
- return "", os.ErrNotExist
- }
|