Преглед на файлове

Fix tests with dockerinit lookup path
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)

Michael Crosby преди 11 години
родител
ревизия
01f9815b55
променени са 5 файла, в които са добавени 30 реда и са изтрити 5 реда
  1. 1 1
      docker/docker.go
  2. 2 1
      execdriver/namespaces/driver.go
  3. 1 1
      integration/runtime_test.go
  4. 3 1
      pkg/libcontainer/nsinit/nsinit/main.go
  5. 23 1
      sysinit/sysinit.go

+ 1 - 1
docker/docker.go

@@ -17,7 +17,7 @@ import (
 )
 
 func main() {
-	if selfPath := utils.SelfPath(); selfPath == "/sbin/init" || strings.Contains(selfPath, "/.dockerinit") {
+	if selfPath := utils.SelfPath(); selfPath == "/sbin/init" || strings.Contains(selfPath, ".dockerinit") {
 		// Running in init mode
 		sysinit.SysInit()
 		return

+ 2 - 1
execdriver/namespaces/driver.go

@@ -86,7 +86,7 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba
 		return -1, err
 	}
 	args := append([]string{c.Entrypoint}, c.Arguments...)
-	return nsinit.Exec(container, factory, stateWriter, term, "/nsinit.log", args)
+	return nsinit.Exec(container, factory, stateWriter, term, "", args)
 }
 
 func (d *driver) Kill(p *execdriver.Command, sig int) error {
@@ -146,6 +146,7 @@ func (d *dockerCommandFactory) Create(container *libcontainer.Container,
 		"-driver", DriverName,
 		"-console", console,
 		"-pipe", fmt.Sprint(syncFd),
+		"-log", logFile,
 	}, args...)
 	c.SysProcAttr = &syscall.SysProcAttr{
 		Cloneflags: uintptr(nsinit.GetNamespaceFlags(container.Namespaces)),

+ 1 - 1
integration/runtime_test.go

@@ -85,7 +85,7 @@ func init() {
 	os.Setenv("TEST", "1")
 
 	// Hack to run sys init during unit testing
-	if selfPath := utils.SelfPath(); selfPath == "/sbin/init" || selfPath == "/.dockerinit" {
+	if selfPath := utils.SelfPath(); selfPath == "/sbin/init" || strings.Contains(selfPath, ".dockerinit") {
 		sysinit.SysInit()
 		return
 	}

+ 3 - 1
pkg/libcontainer/nsinit/nsinit/main.go

@@ -24,7 +24,7 @@ var (
 	ErrWrongArguments = errors.New("Wrong argument count")
 )
 
-func init() {
+func registerFlags() {
 	flag.StringVar(&console, "console", "", "console (pty slave) path")
 	flag.StringVar(&logFile, "log", "none", "log options (none, stderr, or a file path)")
 	flag.IntVar(&pipeFd, "pipe", 0, "sync pipe fd")
@@ -33,6 +33,8 @@ func init() {
 }
 
 func main() {
+	registerFlags()
+
 	if flag.NArg() < 1 {
 		log.Fatal(ErrWrongArguments)
 	}

+ 23 - 1
sysinit/sysinit.go

@@ -7,6 +7,7 @@ import (
 	"github.com/dotcloud/docker/execdriver"
 	_ "github.com/dotcloud/docker/execdriver/chroot"
 	_ "github.com/dotcloud/docker/execdriver/lxc"
+	"io"
 	"io/ioutil"
 	"log"
 	"os"
@@ -55,9 +56,14 @@ func SysInit() {
 		driver     = flag.String("driver", "", "exec driver")
 		pipe       = flag.Int("pipe", 0, "sync pipe fd")
 		console    = flag.String("console", "", "console (pty slave) path")
+		logFile    = flag.String("log", "", "log file path")
 	)
 	flag.Parse()
 
+	if err := setupLogging(*logFile); err != nil {
+		log.Fatalf("setup logging %s", err)
+	}
+
 	// Get env
 	var env []string
 	content, err := ioutil.ReadFile("/.dockerenv")
@@ -67,7 +73,6 @@ func SysInit() {
 	if err := json.Unmarshal(content, &env); err != nil {
 		log.Fatalf("Unable to unmarshal environment variables: %v", err)
 	}
-
 	// Propagate the plugin-specific container env variable
 	env = append(env, "container="+os.Getenv("container"))
 
@@ -89,3 +94,20 @@ func SysInit() {
 		log.Fatal(err)
 	}
 }
+
+func setupLogging(logFile string) (err error) {
+	var writer io.Writer
+	switch logFile {
+	case "stderr":
+		writer = os.Stderr
+	case "none", "":
+		writer = ioutil.Discard
+	default:
+		writer, err = os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
+		if err != nil {
+			return err
+		}
+	}
+	log.SetOutput(writer)
+	return nil
+}