私有(private)注册表上的代理后面的 docker 登录导致 TLS 握手超时

标签 docker proxy

我们有一个私有(private)的 docker 注册表(基于 portus,但无论如何),我尝试将图像推送到该注册表,但它不起作用。它失败并显示以下错误消息:

$ sudo docker login archive.docker-registry.mycompany.com
Username: mylogin
Password: 
Error response from daemon: Get https://archive.docker-registry.mycompany.com/v1/users/:
    net/http: TLS handshake timeout
$ 

我已经在/etc/systemd/system/docker.service.d/http-proxy.conf 中配置了代理(我的 docker 在 centos 7 上):

[Service]
Environment="HTTP_PROXY=http://proxy.mycompany.com:8000/" "NO_PROXY=localhost,127.0.0.1,archive.docker-registry.mycompany.com"

但仍然失败。

我尝试使用 HTTPS_PROXY 而不是 HTTP_PROXY 在 url 中使用 http 或 https,我尝试手动下载证书并在系统中配置它们(update-ca-certs),但它一直失败。

当我更改此配置文件时,以 root 身份执行:

# systemctl daemon-reload
# systemctl restart docker

最佳答案

实际上,我发现如果我注释掉完整的环境行,它适用于私有(private)注册表,但不再适用于 docker hub(当然,不再有代理)。这是适用于私有(private)注册表和 docker hub 公共(public)注册表的最终解决方案:

在 NO_PROXY 环境变量中,仅应使用域名,而不应使用 FQDN(包括“archive.”主机名前缀):

现在这是我的配置文件:

[Service]
Environment="HTTP_PROXY=http://proxy.mycompany.com:8000/" "NO_PROXY=localhost,127.0.0.1,docker-registry.mycompany.com"

请注意,不再有“存档”。也不是“portus”。不再使用 NO_PROXY 前缀,只是以“docker-registry”开头的域名。

正如我看到的 docker 登录命令行包含“archive”。前缀,它具有误导性,我认为它必须位于 NO_PROXY 环境变量中...但不,它不应该。

希望它对某人有帮助。我希望我之前在谷歌上找到了答案,但我没有,所以我只是将其发布在这里,它可能会对某人有所帮助。

关于私有(private)注册表上的代理后面的 docker 登录导致 TLS 握手超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43541963/

相关文章:

angular - 使用 Spring Boot 部署 Angular 应用程序(在 AWS 上)

java - 如何使用 java 测试代理互联网连接?

apache - 是否可以忽略 Apache 代理证书

logging - kubernetes如何设置日志文件的最大大小?

java - 无法通过java执行docker命令

docker - 如何在 Docker 镜像中的 .Net Core 项目中启动 Kestrel

docker - `docker-compose build` 和 `docker build` 有什么区别?

docker - 如何在Docker中配置端口

apache - Apache httpd 背后的 Tomcat 通过 SSL(httpd 工作,tomcat 返回错误 500)

Java - 最快的 TCP/HTTP 通信流?