mai*_*mer 104 docker docker-registry
默认情况下,如果我发出命令:
sudo docker pull ruby:2.2.1
Run Code Online (Sandbox Code Playgroud)
默认情况下,它会从docker.io官方网站上撤下.
Pulling repository docker.io/library/ruby
Run Code Online (Sandbox Code Playgroud)
如何将其更改为我的私人注册表.这意味着如果我发出
sudo docker pull ruby:2.2.1
Run Code Online (Sandbox Code Playgroud)
它将从我自己的私人注册表中提取,输出类似于:
Pulling repository my_private.registry:port/library/ruby
Run Code Online (Sandbox Code Playgroud)
Guy*_*Guy 50
更新:在您的评论之后,目前无法更改默认注册表,请参阅此问题以获取更多信息.
您应该能够这样做,将主机和端口替换为您自己的:
docker pull localhost:5000/registry-demo
Run Code Online (Sandbox Code Playgroud)
如果服务器是远程/具有身份验证,您可能需要使用以下命令登录服务器:
docker login https://<YOUR-DOMAIN>:8080
Run Code Online (Sandbox Code Playgroud)
然后运行:
docker pull <YOUR-DOMAIN>:8080/test-image
Run Code Online (Sandbox Code Playgroud)
小智 26
有一个Docker Hub的镜像的用例(比如Artifactory或者自定义的),这里我没看到提到。这是需要更改默认注册表的最有效的情况之一。
幸运的是,Docker(至少版本 19.03.3)允许您设置镜像(在 Docker CE 中测试)。我不知道这是否适用于推送到该镜像但不在 Docker Hub 上的其他图像,但我知道它将改用镜像。Docker 文档:https : //docs.docker.com/registry/recipes/mirror/#configure-the-docker-daemon。
本质上,您需要添加"registry-mirrors": []到/etc/docker/daemon.json配置文件中。因此,如果您的镜像托管在https://my-docker-repo.my.company.com,/etc/docker/daemon.json则应包含:
{
"registry-mirrors": ["https://my-docker-repo-mirror.my.company.com"]
}
Run Code Online (Sandbox Code Playgroud)
之后,重新启动 Docker 守护进程。现在,如果您执行 a docker pull postgres:12,Docker 应该从镜像而不是直接从 Docker Hub 获取图像。这比在所有图像前加上my-docker-repo.my.company.com
Jos*_*iah 17
原来,这是实际上是可能的,但没有使用真正的泊坞CE或EE版本.
您可以使用Red Hat的docker和'--add-registry'标志,或者您可以使用自己的硬编码默认注册表命名空间/索引修改registry/config.go来自源构建docker.
BMi*_*tch 17
对此的简短回答是你不这样做,或者至少你真的不应该这样做。
是的,有些容器运行时允许您更改默认命名空间,特别是来自 RedHat 的容器运行时。然而,RedHat 现在对这个功能感到遗憾并劝阻客户使用它。Docker 也拒绝支持这一点。
这个问题之所以如此严重,是因为这会导致图像的命名空间不明确。在两台不同的计算机上运行相同的命令可能会提取不同的映像,具体取决于它们配置为使用的注册表。由于 compose 文件、helm 模板和其他运行容器的方式是在机器之间共享的,这实际上引入了安全漏洞。
攻击者可能会抢占 Docker Hub 以外的注册表中的众所周知的映像名称,希望用户可以更改其默认配置并意外运行其映像而不是 Hub 中的映像。创建像 Jenkins 这样的工具的分支,将映像推送到其他注册表,但使用一些代码将加载到 Jenkins 的所有凭据发送到攻击者服务器,这将是微不足道的。今年我们甚至看到了这导致PyPI、NPM 和 RubyGems 等其他包管理器的安全漏洞报告。
相反,像containerd这样的容器运行时的方向是使所有图像名称完全限定,删除Docker Hub自动扩展(像Docker这样的containerd之上的工具仍然应用默认扩展,所以我怀疑这种情况很快就会消失,如果曾经)。
Docker 确实允许您为 Docker Hub 定义注册表镜像,它将在查询 Hub 之前首先查询,但这假设所有内容仍在同一命名空间内,并且镜像只是上游镜像的副本,而不是镜像的不同命名空间。关于如何进行设置的 TL;DR/etc/docker/daemon.json如下systemctl reload docker:
{
"registry-mirrors": ["https://<my-docker-mirror-host>"]
}
Run Code Online (Sandbox Code Playgroud)
对于大多数人来说,这不是问题(对我来说这个问题是 docker 引擎没有镜像非 Hub 注册表的选项)。图像名称是在配置文件或脚本中定义的,因此在该文件中键入一次就很容易了。借助撰写文件和 Helm 模板等工具,注册表可以转换为变量,以允许组织从可配置的注册表名称显式提取用于部署的映像。
小智 8
如果您使用的是fedora发行版,则可以更改文件
/etc/containers/registries.conf
Run Code Online (Sandbox Code Playgroud)
添加域docker.io
Docker 官方立场在 issue #11815 中解释:
问题 11815:允许指定 pull 命令中使用的默认注册表
解析度:
就像之前指出的那样(#11815),这会使命名空间碎片化,并严重损害社区,使 dockerfiles 不再可移植。
[维护者] 将因此关闭它。
Red Hat 有一个允许它的特定实现(参见 anwser,但它被Docker 上游项目拒绝)。它依赖--add-registry于/etc/containers/registries.conf在 RHEL/CentOS 7 中设置的参数。
编辑:
实际上,Docker 支持注册表镜像(也称为“将注册表作为下拉缓存运行”)。 https://docs.docker.com/registry/recipes/mirror/#configure-the-docker-daemon
它似乎不会得到支持,因为它会在社区内产生碎片(即两个用户会得到不同的图像ubuntu:latest).您只需在图像名称前添加主机即可.请参阅此github问题以加入讨论.
(注意,这不是一个固定意见的评论,只是在上述github问题中可以遵循的讨论的简短摘要.)
| 归档时间: |
|
| 查看次数: |
121899 次 |
| 最近记录: |