Error response from daemon: Get "https://10.153.130.10:48081/v2/": http: server gave HTTP response to HTTPS client
时间: 2025-01-04 08:31:25 浏览: 54
### 解决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 客户端的问题了。
阅读全文