docker - 如何创建包含公共和私有图像的 docker-compose.yml 文件?
问题描述
我正在尝试为docker-compose.yml
工作中的特定开发人员团队创建一个文件。我已经将我们的私有映像推送到私有注册表(Azure Container Registry),这没关系/工作:)
接下来,我正在尝试测试如何让这个特定团队的开发人员运行该docker-compose
文件,该文件将拉下所有图像,然后将它们全部启动。
我发现开发人员需要这样做:
-> docker login -u <admin username of my registry> <domain of the registry>
-> docker-compose pull
这会拉下我的私有图像(来自 ACR 私有注册表),但不会拉下 docker hub(公共注册表)中的任何图像。
- Q1:可以混搭吗?
- Q2:是否有另一种方法可以创建一个只读的“用户”。我读过一些关于
service accounts
或其他的东西,但这真的很令人困惑,我不知道该怎么做/如果那是正确的方法。
这是我的示例文件的片段docker-compose
,其中包含公共和私有图像。请注意我如何尝试完全限定图像域......
version: '3.5'
services:
ravendb.data:
image: hub.docker.com/ravendb/ravendb
expose:
- "8080"
networks:
- backend
container_name: ravendb.data
labels:
- "traefik.enable=false"
accounts.api:
image: <snip>.azurecr.io/<snip>/<snip>
networks:
<rest all snipped>
解决方案
Q1 - 两个问题,有些相关 -
您的 Docker Hub 注册表 FQDN 在 RavenDB
image
指令中是错误的 -hub.docker.com
是人类可读的网站,公共 Docker 注册表位于registry.hub.docker.com
或index.docker.io
(附加v1
到这些 uri 以获取 API)。您不需要完整的公共注册表 FQDN 从公共注册表中提取 - 这是默认设置,如果 docker 命令在图像名称之前的图像标记中未检测到 FQDN,则默认情况下将从那里提取。
Q2 - 我不确定 Azure Container Registry 是如何工作的,但如果你不能创建只读用户,我会感到惊讶。普通注册表是基于 REST 的 API 服务器,可以通过在内部设置其权限或通过在其前面放置反向代理来控制,其中 POST/PUT/DELETE 和 PATCH 动词需要与 GET 动词不同的身份验证用户.
推荐阅读
- dns - 主引导映像,但使用不同的主机名
- python - 迭代时添加到字典中的值列表
- node.js - 500 ResolutionError:密钥“services.authentication.basic.user.service”未绑定到上下文中的任何值
- android - 如何显示适合屏幕的 Row() 儿童尺寸?
- azure - 两个租户的 Azure 身份验证
- python - 如何在不添加换行符的情况下将 \n 添加到文件中?
- typescript - 尽管删除了 .vs-Folder,Intellisence 仍错误地标记导入错误
- javascript - 如何使用 javascript 组合嵌套的公共对象值?
- algorithm - 联合查找 - 为什么我们要检查加权快速联合的大小
- signalr - 如何在 winforms 中进行 SignalR 聊天