我正在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响应
答案 0 :(得分:0)
client.NewEnvClient()
上次我尝试过时,此API需要使用与{1}}不同的环境变量,而不是普通的docker客户端。
来自client.go:
DOCKER_HOST
要使用此功能,您需要以下列格式之一设置/导出DOCKER_HOST: