使用 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.com
docker 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