使用golang docker engine

时间:2016-10-03 20:52:50

标签: sockets go docker

我正在Go中创建一个项目,我正在使用这两个项目" github.com/docker/docker/client"和" github.com/docker/docker/api/types" ;,但是当我尝试创建一个容器时,我收到以下错误:

  

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

我无法理解为什么会发生这种情况,而且只有在使用新的golang docker引擎之后才会发生(旧的&#34; github.com/docker/engine-api"现已弃用)。< / p>

代码并不复杂,所以我想知道我是否遗漏了一些东西:

    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

  

FROM debian

     

MAINTAINER Leadis Journey

     

LABEL描述=&#34;此泊坞窗图像用于编译和执行用户程序。&#34;

     

LABEL Version =&#34; 0.1&#34;

     

VOLUME / root / host /

     

运行apt-get update&amp;&amp;是的| apt-get upgrade

     

RUN yes | apt-get install gcc g ++ python3 make

     

COPY container.py /root/server.py

修改

试图用更简单的程序来测试它

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响应

1 个答案:

答案 0 :(得分:0)

client.NewEnvClient()

上次我尝试过时,此API需要使用与{1}}不同的环境变量,而不是普通的docker客户端。

来自client.go

DOCKER_HOST

要使用此功能,您需要以下列格式之一设置/导出DOCKER_HOST:

  1. UNIX:///var/run/docker.sock
  2. http://localhost:2375
  3. https://localhost:2376