centos 7 下 docker registry push 提示“server gave HTTP response to HTTPS client”

本文分析了使用dockerregistrypush时出现错误的原因,并提供了两种解决方案:一是将dockerregistry升级为HTTPS服务;二是更改docker客户端的请求方式,通过创建daemon.json文件允许其以HTTP方式访问不安全的dockerregistry。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用docker registry push 报错

原因分析:
    docker registry 未采用https服务,而客户端docker使用https请求push所致。

解决方案:

    1、docker registry升级为https服务(需要证书,可参照百度)
    2、docker客户端讲https请求更改为http请求(很多博客修改etc/systemconfig/docker,但更多人可能不存在该文件)

操作:
    

在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:

{ "insecure-registries":["192.168.100.100:5000"] }

注意:
    该配置是配置在docker客户端,让docker客户端以不安全的http请求访问docke registry,ip及端口填写的是docker registry提供服务容器的ip及端口(映射后)。

### 解决Docker守护程序HTTP响应给HTTPS客户端的错误 当配置Docker以确保其通过TLS安全连接通信时,如果客户端尝试使用HTTPS而服务器仅提供HTTP服务,则会出现`http response to https client error` 错误。为了修正这个问题,需确保Docker守护进程被正确设置为支持TLS加密。 #### 修改Docker Daemon配置文件 对于基于Systemd的服务管理器,在CentOS或其他类似的Linux发行版上,可以通过编辑 `/etc/docker/daemon.json` 文件来启用TLS验证: ```json { "tls": true, "tlscacert": "/path/to/ca.pem", "tlscert": "/path/to/server-cert.pem", "tlskey": "/path/to/server-key.pem", "hosts": ["tcp://0.0.0.0:2376"] } ``` 上述JSON片段中的路径应替换为实际证书的位置[^1]。 #### 创建自签名SSL/TLS证书 如果没有现成的CA签发的证书,可以利用OpenSSL工具创建一对用于测试目的的自签名密钥和证书: ```bash openssl req -newkey rsa:4096 \ -keyout ca.key \ -x509 \ -days 365 \ -out ca.crt ``` 接着生成服务器端使用的私钥与公钥对,并签署它们: ```bash openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256 ``` 最后一步是将这些新创建的证书放置到适当位置并更新 `daemon.json` 中的相关字段指向这些文件。 #### 客户端配置 为了让Docker CLI能够识别新的TLS环境变量,可以在shell会话中临时定义如下几个环境变量,或者将其添加至用户的 `.bashrc` 或其他初始化脚本里以便长期有效: ```bash export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://<your-server-ip>:2376" export DOCKER_CERT_PATH="/path/to/certs" ``` 这里 `<your-server-ip>` 应该替换成运行着Docker守护程序的实际IP地址;同时也要确认 `DOCKER_CERT_PATH` 下包含了之前提到的所有必要证书文件(ca.pem, cert.pem 和 key.pem)。 完成以上更改后记得重启Docker服务使改动生效: ```bash sudo systemctl daemon-reload && sudo systemctl restart docker ``` 此时再次执行命令应该不会再遇到 HTTP 响应回复 HTTPS 客户端的问题了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值