Detect running in a container (#6495)

This commit is contained in:
Daniel Hiltgen 2024-09-05 13:24:51 -07:00 committed by GitHub
parent bf612cd608
commit a60d9b89ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,6 +1,7 @@
package server package server
import ( import (
"bufio"
"bytes" "bytes"
"cmp" "cmp"
"context" "context"
@ -17,10 +18,12 @@ import (
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
"regexp"
"runtime" "runtime"
"slices" "slices"
"strconv" "strconv"
"strings" "strings"
"sync"
"github.com/ollama/ollama/api" "github.com/ollama/ollama/api"
"github.com/ollama/ollama/auth" "github.com/ollama/ollama/auth"
@ -1087,7 +1090,7 @@ func makeRequest(ctx context.Context, method string, requestURL *url.URL, header
} }
} }
req.Header.Set("User-Agent", fmt.Sprintf("ollama/%s (%s %s) Go/%s", version.Version, runtime.GOARCH, runtime.GOOS, runtime.Version())) req.Header.Set("User-Agent", fmt.Sprintf("ollama/%s (%s %s) Go/%s%s", version.Version, runtime.GOARCH, runtime.GOOS, runtime.Version(), deployment()))
if s := req.Header.Get("Content-Length"); s != "" { if s := req.Header.Get("Content-Length"); s != "" {
contentLength, err := strconv.ParseInt(s, 10, 64) contentLength, err := strconv.ParseInt(s, 10, 64)
@ -1162,3 +1165,22 @@ func verifyBlob(digest string) error {
return nil return nil
} }
var deployment = sync.OnceValue(func() string {
if runtime.GOOS == "linux" {
file, err := os.Open("/proc/1/cgroup")
if err != nil {
return ""
}
defer file.Close()
anchorPoint := regexp.MustCompile("0::/.*/")
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if anchorPoint.MatchString(line) {
return " container"
}
}
}
return ""
})