Allow docker build from stdin
This commit is contained in:
parent
6cbc7757b2
commit
33ea1483d5
35
commands.go
35
commands.go
|
@ -131,12 +131,16 @@ func (cli *DockerCli) CmdInsert(args ...string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *DockerCli) CmdBuild(args ...string) error {
|
func (cli *DockerCli) CmdBuild(args ...string) error {
|
||||||
cmd := Subcmd("build", "[CONTEXT]", "Build an image from a Dockerfile")
|
cmd := Subcmd("build", "[CONTEXT|-]", "Build an image from a Dockerfile")
|
||||||
if err := cmd.Parse(args); err != nil {
|
if err := cmd.Parse(args); err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var multipartBody io.Reader
|
var (
|
||||||
|
multipartBody io.Reader
|
||||||
|
file io.ReadCloser
|
||||||
|
contextPath string
|
||||||
|
)
|
||||||
|
|
||||||
// Init the needed component for the Multipart
|
// Init the needed component for the Multipart
|
||||||
buff := bytes.NewBuffer([]byte{})
|
buff := bytes.NewBuffer([]byte{})
|
||||||
|
@ -146,16 +150,23 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
|
||||||
|
|
||||||
dockerfile := "Dockerfile"
|
dockerfile := "Dockerfile"
|
||||||
|
|
||||||
if cmd.Arg(0) != "" {
|
if cmd.Arg(0) != "" && cmd.Arg(0) != "-" {
|
||||||
|
contextPath = cmd.Arg(0)
|
||||||
dockerfile = path.Join(cmd.Arg(0), dockerfile)
|
dockerfile = path.Join(cmd.Arg(0), dockerfile)
|
||||||
}
|
}
|
||||||
|
if cmd.Arg(0) != "-" {
|
||||||
|
f, err := os.Open(dockerfile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
file = f
|
||||||
|
} else {
|
||||||
|
contextPath = cmd.Arg(1)
|
||||||
|
file = os.Stdin
|
||||||
|
}
|
||||||
|
|
||||||
// Create a FormFile multipart for the Dockerfile
|
// Create a FormFile multipart for the Dockerfile
|
||||||
file, err := os.Open(dockerfile)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer file.Close()
|
|
||||||
if wField, err := w.CreateFormFile("Dockerfile", "Dockerfile"); err != nil {
|
if wField, err := w.CreateFormFile("Dockerfile", "Dockerfile"); err != nil {
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
|
@ -166,14 +177,14 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
|
||||||
compression := Bzip2
|
compression := Bzip2
|
||||||
|
|
||||||
// Create a FormFile multipart for the context if needed
|
// Create a FormFile multipart for the context if needed
|
||||||
if cmd.Arg(0) != "" {
|
if contextPath != "" {
|
||||||
// FIXME: Use NewTempArchive in order to have the size and avoid too much memory usage?
|
// FIXME: Use NewTempArchive in order to have the size and avoid too much memory usage?
|
||||||
context, err := Tar(cmd.Arg(0), compression)
|
context, err := Tar(contextPath, compression)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// NOTE: Do this in case '.' or '..' is input
|
// NOTE: Do this in case '.' or '..' is input
|
||||||
absPath, err := filepath.Abs(cmd.Arg(0))
|
absPath, err := filepath.Abs(contextPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -193,7 +204,7 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
req.Header.Set("Content-Type", w.FormDataContentType())
|
req.Header.Set("Content-Type", w.FormDataContentType())
|
||||||
if cmd.Arg(0) != "" {
|
if contextPath != "" {
|
||||||
req.Header.Set("X-Docker-Context-Compression", compression.Flag())
|
req.Header.Set("X-Docker-Context-Compression", compression.Flag())
|
||||||
fmt.Println("Uploading Context...")
|
fmt.Println("Uploading Context...")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue