是否可以为私有 docker 存储库定义别名?
我在服务器 docker.internal.example.com 上有一个存储库供内部使用,但外部不可用。现在我希望能够将图像推送到另一个存储库 docker.distr.example.com,该存储库可用于客户端安装。
如果最终图像不依赖于中间图像,那么一切都会好起来的,例如 FROM 中提到的:
FROM docker.internal.example.com:5000/java/jetty-jdk8:latest
该镜像无法从 docker.distr.example.com 中提取,因为对 java/jetty-jdk8 的引用将无法解析(docker.internal.example.com 将不可见)。
理想情况下,我希望能够写得简单
FROM java/jetty-jdk8:latest
但我知道,出于某种奇怪的原因,docker 开发人员认为它不安全,所以类似的东西就足够了:
FROM DOCKER-PRIVATE:5000/java/jetty-jdk8:latest
您正在查找的别名是您可以在本地创建的 DNS 条目。您需要找出私有注册表的 IP 地址。
您可以通过运行
host docker.internal.example.com
来做到这一点。
编辑
/etc/hosts
并添加类似 docker-registry ip-address-of-registry
的条目
我不确定这是否与OP问题相关,但我在尝试使用具有不同主机名的容器注册表时发现了这个问题:
private.example.com
private.example.com
,但可以达到public.somewherelse.com
无法使用 CNAME,因为 `
的 TLS 证书我想出的解决方案:
private.example.com
:#!/usr/bin/env bash
caddy reverse-proxy \
--internal-certs \
--from "public.somewherelse.com" \
--to https://private.example.com:443 \
--change-host-header
从执行映像构建的机器我现在可以:
docker pull public.somewherelse.com/repository:latest
docker push public.somewherelse.com/repository:other
图像也可以从私人注册表中获得:
docker pull private.example.com/repository:other
会工作得很好。
与使用
/etc/hosts
中的条目相比,优点是使用 TLS 与注册表进行通信。
缺点是它需要一个额外的过程(在我的例子中是球童)
据我所知,目前 Docker 不支持别名。
但是您可以使用以下可能的解决方案之一:
为您的注册表域创建 DNS CNAME 条目。
或
您可以在 Google 网上论坛讨论中阅读更多详细信息此处。