私有 docker 存储库的别名

问题描述 投票:0回答:3

是否可以为私有 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
docker repository
3个回答
0
投票

您正在查找的别名是您可以在本地创建的 DNS 条目。您需要找出私有注册表的 IP 地址。

您可以通过运行

host docker.internal.example.com
来做到这一点。

编辑

/etc/hosts
并添加类似
docker-registry ip-address-of-registry

的条目

0
投票

我不确定这是否与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 与注册表进行通信。

缺点是它需要一个额外的过程(在我的例子中是球童)


-1
投票

据我所知,目前 Docker 不支持别名。

但是您可以使用以下可能的解决方案之一:

  1. 为您的注册表域创建 DNS CNAME 条目。

  2. 在要使用它的计算机上的 /etc/hosts 文件中创建别名。

您可以在 Google 网上论坛讨论中阅读更多详细信息此处

© www.soinside.com 2019 - 2024. All rights reserved.