使用 docker-compose 从私有仓库拉取镜像

Posted

技术标签:

【中文标题】使用 docker-compose 从私有仓库拉取镜像【英文标题】:Use docker-compose to pull images from private repository 【发布时间】:2018-01-15 22:58:53 【问题描述】:

我正在使用 docker-compose 命令运行多个容器。问题是我的 docker-compose 必须从公共存储库和私有存储库中提取一些图像。我打算做的是将所有需要的图像推送到私有存储库,但是如何让 docker-compose 从私有存储库中拉取图像。

简而言之->当图像仅在私有存储库中可用时如何指向私有存储库

【问题讨论】:

你使用的是什么注册表? 我们正在使用 jfrog 访问私有镜像应该和公共镜像一样,除了认证部分。例如,您的 Dockerfile 基础映像应该仍然是这样的:FROM private/repo:tag,并且在 Docker Compose 中应该是相同的。 Docker Hub 和 Amazon ECR 可以通过使用它们的 CLI 进行身份验证来访问,在您的情况下,我只能将您指向 JFrog 的注册表页面:click here 我们假设最终用户没有 docker 文件。他只有一个 docker compose 文件,当他执行 docker-compose up 时,该文件应该自动提取他在 docker-compose.yml 文件中提到的图像 是的,所以它应该以同样的方式工作。我相信 JFrog 为您的私有存储库提供了一个自定义 URI,但是为了获得对该存储库 URI 的访问权限,您必须进行身份验证或登录。 【参考方案1】:

使用docker login 命令。 (Official doc) 输入您的凭据,然后您可以提取私有图像,前提是您有访问权限。

如果您想登录自托管注册表,您可以通过添加服务器名称来指定。

docker login localhost:8080

感谢@herm's 的评论,如果你想使用 swarm,请使用: --with-registry-auth 选项。 Personnaly,我使​​用这个命令:

docker stack deploy --with-registry-auth --compose-file dev.compose.yml myProjectName

【讨论】:

仅供参考:当在 swarm 中使用 docker stack deploy 时,--with-registry-auth 选项会将登录信息转发到其他节点。 如果您将映像托管在私有 Artifactory Enterprise 服务器实例上,则不能只使用 docker login docker pull imageName。你必须做docker login artifactory.myCompany.comdocker pull artifactory.myCompany.com/imageName:label。但是,即使在命令行上登录,然后运行包含image: artifactory.myCompany.com/imageName:label 的 docker-compose 文件,我仍然收到错误pull access denied for imageName, repository does not exist or may require 'docker login' 我似乎需要添加一个额外的 pull 命令,例如docker login <host> && docker compose pull && docker compose up 或者我会得到failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: failed to fetch anonymous token: unexpected status: 401 Unauthorized

以上是关于使用 docker-compose 从私有仓库拉取镜像的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes-通过Rancher从Harbor私有仓库拉取镜像

k8s从私有仓库拉取镜像创建pod时ImagePullBackOff

docker私有镜像仓库搭建和镜像删除

创建 deployment时 从 私有仓库 拉取镜像失败的解决办法 ErrImagePull

11-Docker-搭建私有仓库

在阿里云创建私有仓库上传并拉取