我已经设置了一个 Docker Registry(端口 5000),然后可以通过 https(端口 443)通过反向代理(HAproxy)访问互联网。
我的反向代理不是监听端口 80(由于各种原因)-只有 443。
但是,当我尝试将图像拉/推到注册表时,出现此错误:
> docker push dockerreg.mydomain.tld/foo/bar:tag
The push refers to repository [dockerreg.mydomain.tld/foo/bar]
67e5bc702bd3: Layer already exists
1ee6a18298af: Layer already exists
0d8d066a4449: Layer already exists
....
402111a9b517: Layer already exists
5be968ab3b04: Layer already exists
b8d33b7d28fe: Layer already exists
Patch http://dockerreg.mydomain.tld/v2/foo/bar/blobs/uploads/840a9fc2-5c10-4c0e-b674-82f76c3794a3?_state=vcTZPbOrQmhcKwilCyutNGwVpFjvWigJCApZHA834757Ik5hbWUiOiJmb3Rvd2V0dGVyL2NsZWFuIiwiVVVJRCI6Ijg0MGE5ZmMyLTVjMTAtNGMwZS1iNjc0LTgyZjc2YzM3OTRhMyIsIk9mZnNldCI6MCwiU3RhcnRlZEF0IjoiMjAyMS0wOC0xNFQyMTozODo1Mi42MzgxNjY5NTdaIn0%3D:
dial tcp 1.2.3.4:80: i/o timeout
因此显然它尝试通过 http/80 访问注册表
我能够使用 docker login 命令,https://dockerreg....
但 docker pull/push 命令无法通过 https:// 运行
有没有什么办法可以访问我的docker注册表,而无需在我的反向代理的80端口上进行https重定向?
答案1
您需要设置 httphost
选项:https://docs.docker.com/registry/configuration/#http
注册表的外部可访问地址的完全限定 URL。如果存在,则在创建生成的 URL 时使用它。否则,这些 URL 源自客户端请求。
可以在注入注册表的配置文件中设置,也可以使用环境变量进行设置REGISTRY_HTTP_HOST
。