我在 Gitlab CI 中使用带有 DinD 的 docker 执行器,并且我有一个在主机中运行的本地注册表容器。
我想将作业容器中正在构建的映像推送到主机中运行的本地注册表容器。
通常,如果从主机推送到注册表容器端口的本地主机,您会怎么做。像这样:
docker push localhost:5000/my-ubuntu
但是由于我是从作业容器中推送的,所以我不知道该怎么做。
我尝试了主机ip:
docker push some_ip_address:5000/my-ubuntu
但是我得到了:
The push refers to repository [some_ip_address:5000/my-ubuntu]
Get "https://some_ip_address:5000/v2/": http: server gave HTTP response to HTTPS client
工作失败了...
正如您从错误中看到的那样,当您使用计算机 IP 时,您实际上是从 docker 注册表获得了响应。
问题在于,默认情况下,docker 期望注册表使用安全的 HTTPS,但您的本地注册表使用纯 HTTP。
为了使您能够连接到 HTTP 注册表,您必须将其添加到您的 insecure-registries
中的
daemon.json
:
{
"insecure-registries" : ["some_ip_address:5000"]
}
这需要在想要推送映像的容器(而不是 docker 主机)中完成。