Jelajahi Sumber

Runtime: Automatically use docker-init if it exists

In some builds the main docker binary is not statically linked,
and as such not usable in as the .dockerinit binary, for those
cases we look for a separately shipped docker-init binary and
use that instead.
Alexander Larsson 12 tahun lalu
induk
melakukan
0f5ccf934e
1 mengubah file dengan 12 tambahan dan 1 penghapusan
  1. 12 1
      runtime.go

+ 12 - 1
runtime.go

@@ -10,6 +10,7 @@ import (
 	"os"
 	"os/exec"
 	"path"
+	"path/filepath"
 	"sort"
 	"strings"
 	"time"
@@ -42,7 +43,17 @@ type Runtime struct {
 var sysInitPath string
 
 func init() {
-	sysInitPath = utils.SelfPath()
+	selfPath := utils.SelfPath()
+
+	// If we have a separate docker-init, use that, otherwise use the
+	// main docker binary
+	dir := filepath.Dir(selfPath)
+	dockerInitPath := filepath.Join(dir, "docker-init")
+	if _, err := os.Stat(dockerInitPath); err != nil {
+		sysInitPath = selfPath
+	} else {
+		sysInitPath = dockerInitPath
+	}
 }
 
 // List returns an array of all containers registered in the runtime.