Browse Source

Make sure the destination directory exists when using docker insert

Guillaume J. Charmes 12 years ago
parent
commit
9db4972a70
3 changed files with 8 additions and 3 deletions
  1. 1 1
      builder.go
  2. 1 1
      commands.go
  3. 6 1
      container.go

+ 1 - 1
builder.go

@@ -110,7 +110,7 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) error {
 			}
 
 			// Commit the container
-			base, err := builder.Commit(c, "", "", "", "")
+			base, err = builder.Commit(c, "", "", "", "")
 			if err != nil {
 				return err
 			}

+ 1 - 1
commands.go

@@ -105,7 +105,7 @@ func (srv *Server) CmdInsert(stdin io.ReadCloser, stdout rcli.DockerConn, args .
 	if err != nil {
 		return err
 	}
-	fmt.Fprintf(stdout, "%s\n", img)
+	fmt.Fprintf(stdout, "%s\n", img.Id)
 	return nil
 }
 

+ 6 - 1
container.go

@@ -180,7 +180,12 @@ func (settings *NetworkSettings) PortMappingHuman() string {
 
 // Inject the io.Reader at the given path. Note: do not close the reader
 func (container *Container) Inject(file io.Reader, pth string) error {
-	dest, err := os.Open(path.Join(container.rwPath(), pth))
+	// Make sure the directory exists
+	if err := os.MkdirAll(path.Join(container.rwPath(), path.Dir(pth)), 0755); err != nil {
+		return err
+	}
+	// FIXME: Handle permissions/already existing dest
+	dest, err := os.Create(path.Join(container.rwPath(), pth))
 	if err != nil {
 		return err
 	}