Docker 容器内的 Docker golang 客户端

我正在尝试使用docker go 客户端连接到谷歌容器注册表以列出和删除图像。我的 golang 应用程序也存在于 docker 容器中。

这是我的 golang 应用程序的 dockerfile:

FROM docker:latest


USER root


RUN apk add --update openssl


ADD ./data /app/data

ADD ./data/docker /app/data/docker

ADD mygolangapp /app


RUN chmod -R a+rwx ./app/data/docker/generate_docker_cert.sh

RUN sh ./app/data/docker/generate_docker_cert.sh


ENV GOOGLE_APPLICATION_CREDENTIALS ./app/data/myserviceaccount.json

ENV DOCKER_CONFIG ./app/data/docker

ENV DOCKER_CERT_PATH .

ENV DOCKER_HOST ????????


ENTRYPOINT ["/app/mygolangapp"]

这是 generate_docker_cert.sh 文件(https://gist.github.com/bradrydzewski/a6090115b3fecfc25280

这是我的 golang 代码,用于创建 docker go 客户端和列表容器。

jsonBytes, err := ioutil.ReadFile(os.Getenv("GOOGLE_APPLICATION_CREDENTIALS"))

if err != nil {

    panic(err)

}


dockercli, err := client.NewEnvClient()

if err != nil {

    panic(err)

}


dockercli.RegistryLogin(context.Background(), types.AuthConfig{

    Username:      "_json_key",

    Password:      string(jsonBytes),

    ServerAddress: "https://eu.gcr.io",

})


containers, err := dockercli.ContainerList(context.Background(), types.ContainerListOptions{})

if err != nil {

    panic(err)

}


for _, container := range containers {

    fmt.Printf("%s %s\n", container.ID[:10], container.Image)

}

目前我收到此错误:


error during connect: Get https://%2Fvar%2Frun%2Fdocker.sock/v1.25/containers/json?limit=0: dial tcp: lookup /var/run/docker.sock: no such host

所以我在我的 docker-compose 中添加了 docker.sock 作为卷,但它不起作用?


mygolangapp:

  build: ./mygolangapp

  volumes:

    - /var/run/docker.sock:/var/run/docker.sock

我的问题是:如何在谷歌容器注册表的 golang 应用程序中使用 docker golang 客户端。我在这里做错了什么或错过了什么?DOCKER_HOST 应该是什么?


慕娘9325324
浏览 193回答 0
0回答

墨色风雨

作为潜在的替代方案,您可以探索 google/go-containerregistry 库: https: //github.com/google/go-containerregistry看起来您正在尝试实施某种垃圾收集工具。如果是这样,您还可以在此处查看如何使用该库的示例: https: //github.com/google/go-containerregistry/pull/300
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go