配置自签名证书的Docker私有仓库仅支持HTTPS无法通过HTTP访问如何解决
Docker私有仓库HTTP访问配置方案
你启动Registry容器时配置了REGISTRY_HTTP_TLS_CERTIFICATE和REGISTRY_HTTP_TLS_KEY两个TLS相关环境变量,Registry服务会强制启用TLS加密,仅接收HTTPS请求。你使用HTTP访问时,服务端期待TLS握手报文,收到的是HTTP明文请求,因此会抛出日志中的TLS握手错误。
可根据需求选择以下方案实现HTTP访问:
方案1:完全关闭HTTPS,仅启用HTTP
直接移除启动命令中TLS相关的环境变量和证书挂载配置即可,修改后的启动命令如下:
docker run -d -p 5000:5000 --restart=always --name registry registry
如果需要持久化镜像存储,可以自行添加存储卷挂载参数。
方案2:同时支持HTTP和HTTPS
Registry本身不支持同一端口同时提供HTTP和HTTPS服务,可以通过反向代理实现双协议支持:
- 保留原有Registry的TLS配置,端口5000提供HTTPS服务
- 部署Nginx反向代理,监听新端口(如5001)提供HTTP服务,转发请求到Registry的5000端口
Nginx配置示例:
server { listen 5001; location / { proxy_pass https://127.0.0.1:5000; proxy_set_header Host $host; proxy_ssl_verify off; } }
Docker客户端额外配置
如果使用Docker客户端访问HTTP协议的私有仓库,需要将该仓库添加到Docker daemon的不安全仓库列表:
- 编辑
/etc/docker/daemon.json,添加配置:
{ "insecure-registries": ["192.168.13.10:5000"] }
- 重启Docker服务生效:
systemctl daemon-reload systemctl restart docker
内容的提问来源于stack exchange,提问作者İsmet
相关产品推荐
相关产品推荐

