我有一个位于防火墙后面的 docker 服务器,所以我无法从内部服务器之外的任何注册表直接从中提取图像。
我已经配置了二注册镜像(registry-1.docker.io
和mcr.microsoft.com
),如下文档。
我的daemon.json
样子是:
{
"registry-mirrors": [
"https://registry_1_docker_io.example.com",
"https://mcr_microsoft_com.example.com"
]
}
我可以通过执行以下命令从 docker hub 成功提取镜像:
$ docker pull nginx:1
1: Pulling from library/nginx
....
Status: Downloaded newer image for nginx:1
我的问题是我无法从微软注册表中提取图像:
# docker pull mcr.microsoft.com/mssql/server:2017-latest
Error response from daemon: Get "https://mcr.microsoft.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
docker 尝试直接连接到mcr
我的镜像并忽略它。如果我使用短镜像名称(mssql/server:2017-latest
而不是mcr.microsoft.com/mssql/server:2017-latest
),它就可以工作,但如果两者上的标签相同,它可能会从 docker hub 而不是微软的 mcr 获取镜像。
此外,如果我查看日志,docker 会按顺序尝试图像的所有代理,因此可能会出现从错误的存储库获取图像的情况。
有什么方法可以将镜像标记为特定注册表的镜像?
答案1
有什么方法可以将镜像标记为特定注册表的镜像?
不,这是 Docker 引擎的限制,registry-mirrors
仅适用于 Docker Hub。您可以关注问题 18818更多细节。
当 docker 在不久的将来将镜像处理从 docker 交换到 containerd 时,这种情况可能会发生变化,因为 containerd 具有处理镜像的不同配置。