Клиент Docker Golang в Docker-контейнере
Я пытаюсь использовать Docker Go Client для подключения к реестру контейнера Google для просмотра и удаления изображений. Мое приложение golang также существует в Docker-контейнере.
Это dockerfile для моего приложения 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 ответ
В качестве потенциальной альтернативы вы можете изучить библиотеку google/go-containerregistry: https://github.com/google/go-containerregistry
Похоже, вы пытаетесь реализовать какой-то инструмент для сбора мусора. Если это так, вы также можете посмотреть здесь пример использования библиотеки: https://github.com/google/go-containerregistry/pull/300