使用golang docker引擎创build容器时出错

我在Go中创build一个项目,我使用“github.com/docker/docker/client”和“github.com/docker/docker/api/types”,但是当我尝试创build一个容器时,我得到以下错误:

错误:2016/10/03 22:39:26 containers.go:84:在连接时出错:发布https://%2Fvar%2Frun%2Fdocker.sock/v1.23/containers/create :http:服务器给了HTTP响应到HTTPS客户端

我不明白为什么会发生这种情况,它只发生在使用新的golang泊坞窗引擎后(旧的“github.com/docker/engine-api”现在已被弃用)。

代码没有任何复杂的东西,所以我想知道我是否缺less一些东西:

resp, err := cli.Pcli.ContainerCreate(context.Background(), initConfig(), nil, nil, "") if err != nil { return err } 

而被调用的initConfig执行以下操作:

 func initConfig() (config *container.Config) { mount := map[string]struct{}{"/root/host": {}} return &container.Config{Image: "leadis_image", Volumes: mount, Cmd: strslice.StrSlice{"/root/server.py"}, AttachStdout: true}} 

这里也是我的dockerfile

从debian

维护者Leadis之旅

LABEL Description =“这个docker图像用于编译和执行用户的程序。”

LABEL版本=“0.1”

VOLUME / root / host /

运行apt-get update && yes | apt-get升级

运行是| apt-get install gcc g ++ python3 make

COPY container.py /root/server.py

编辑

只是试图用一个更简单的程序来testing它

 package main import ( "fmt" "os" "io/ioutil" "github.com/docker/docker/client" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/strslice" "golang.org/x/net/context" ) func initConfig() (config *container.Config) { mount := map[string]struct{}{"/root/host": {}} return &container.Config{Image: "leadis_image", Volumes: mount, Cmd: strslice.StrSlice{"/root/server.py"}, AttachStdout: true} } func main() { client, _ := client.NewEnvClient() cwd, _ := os.Getwd() ctx, err := os.Open(cwd+"/Dockerfile.tar.gz") if err != nil { fmt.Println(err) return } build, err := client.ImageBuild(context.Background(), ctx, types.ImageBuildOptions{Tags: []string{"leadis_image"}, Context: ctx, SuppressOutput: false}) if err != nil { fmt.Println(err) return } b, _ := ioutil.ReadAll(build.Body) fmt.Println(string(b)) _, err = client.ContainerCreate(context.Background(), initConfig(), nil, nil, "") if err != nil { fmt.Println(err) } } 

相同的dockerfile,但我仍然得到相同的错误:

连接时发生错误:发布https://%2Fvar%2Frun%2Fdocker.sock/v1.23/containers/create :http:服务器向HTTPS客户端发送了HTTP响应

 client.NewEnvClient() 

上次我尝试过,这个API期望像DOCKER_HOST这样的环境variables与DOCKER_HOST客户端有不同的语法。

从client.go :

 // NewEnvClient initializes a new API client based on environment variables. // Use DOCKER_HOST to set the url to the docker server. // Use DOCKER_API_VERSION to set the version of the API to reach, leave empty for latest. // Use DOCKER_CERT_PATH to load the TLS certificates from. // Use DOCKER_TLS_VERIFY to enable or disable TLS verification, off by default. 

要使用这个,需要使用以下格式之一来设置/导出DOCKER_HOST:

  1. UNIX:///var/run/docker.sock
  2. HTTP://本地主机:2375
  3. https://开头本地主机:2376