123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package main
- import (
- "fmt"
- "io/ioutil"
- "os"
- "os/exec"
- "path/filepath"
- "sync"
- )
- var ensureHTTPServerOnce sync.Once
- func ensureHTTPServerImage() error {
- var doIt bool
- ensureHTTPServerOnce.Do(func() {
- doIt = true
- })
- if !doIt {
- return nil
- }
- protectedImages["httpserver:latest"] = struct{}{}
- tmp, err := ioutil.TempDir("", "docker-http-server-test")
- if err != nil {
- return fmt.Errorf("could not build http server: %v", err)
- }
- defer os.RemoveAll(tmp)
- goos := daemonPlatform
- if goos == "" {
- goos = "linux"
- }
- goarch := os.Getenv("DOCKER_ENGINE_GOARCH")
- if goarch == "" {
- goarch = "amd64"
- }
- goCmd, lookErr := exec.LookPath("go")
- if lookErr != nil {
- return fmt.Errorf("could not build http server: %v", lookErr)
- }
- cmd := exec.Command(goCmd, "build", "-o", filepath.Join(tmp, "httpserver"), "github.com/docker/docker/contrib/httpserver")
- cmd.Env = append(os.Environ(), []string{
- "CGO_ENABLED=0",
- "GOOS=" + goos,
- "GOARCH=" + goarch,
- }...)
- var out []byte
- if out, err = cmd.CombinedOutput(); err != nil {
- return fmt.Errorf("could not build http server: %s", string(out))
- }
- cpCmd, lookErr := exec.LookPath("cp")
- if lookErr != nil {
- return fmt.Errorf("could not build http server: %v", lookErr)
- }
- if out, err = exec.Command(cpCmd, "../contrib/httpserver/Dockerfile", filepath.Join(tmp, "Dockerfile")).CombinedOutput(); err != nil {
- return fmt.Errorf("could not build http server: %v", string(out))
- }
- if out, err = exec.Command(dockerBinary, "build", "-q", "-t", "httpserver", tmp).CombinedOutput(); err != nil {
- return fmt.Errorf("could not build http server: %v", string(out))
- }
- return nil
- }
|