Клиент Docker Golang в Docker-контейнере - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь использовать docker go client для подключения к реестру контейнера Google для получения списка и удаления изображений.Мое приложение golang также существует в контейнере Docker.

Это файл Docker для моего приложения Golang:

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.sock как томв моем docker-compose, но он не работает?

mygolangapp:
  build: ./mygolangapp
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock

Мой вопрос таков: как я могу использовать клиент Docker Golang в приложении GOLANG для реестра контейнеров Google. Что я делаю неправильно или отсутствует здесь?? Каким должен быть DOCKER_HOST?

Спасибо за любую помощь. Любой другой подход приветствуется!

1 Ответ

0 голосов
/ 01 декабря 2018

В качестве потенциальной альтернативы вы можете изучить библиотеку google / go-containerregistry: https://github.com/google/go-containerregistry

Похоже, вы пытаетесь реализовать какой-то инструмент для сбора мусора.Если это так, вы также можете посмотреть пример использования библиотеки: https://github.com/google/go-containerregistry/pull/300

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...