1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package docker
- import (
- "bufio"
- "bytes"
- "errors"
- "os"
- )
- var (
- _dockerId string
- dockerFeature = []byte("docker/")
- errNotMatch = errors.New("not match")
- )
- func SelfContainerID() (did string, err error) {
- if _dockerId != "" {
- return _dockerId, nil
- }
- var (
- pos int
- p []byte
- fp *os.File
- )
- if fp, err = os.Open("/proc/self/cgroup"); err != nil {
- return
- }
- defer func() {
- _ = fp.Close()
- }()
- br := bufio.NewReader(fp)
- for {
- if p, _, err = br.ReadLine(); err != nil {
- break
- }
- if pos = bytes.Index(p, dockerFeature); pos == -1 {
- continue
- }
- p = bytes.TrimSpace(p[pos+len(dockerFeature):])
- if pos = bytes.LastIndexByte(p, '/'); pos == -1 {
- _dockerId = string(p)
- return _dockerId, nil
- } else {
- _dockerId = string(p[pos+1:])
- return _dockerId, nil
- }
- }
- return "", errNotMatch
- }
|