使用IP拉取私有Docker Registry镜像遇Tunnel or SSL Forbidden错误求助
解决Docker私有Registry用IP拉取镜像时的SSL/Tunnel错误
嘿,我来帮你搞定这个问题!你遇到的Error response from daemon: Get https://10.118.56.140:5000/v2/: Tunnel or SSL Forbidden错误,本质是Docker默认要求私有Registry使用HTTPS通信,但你本地搭建的Registry默认是HTTP的。而Docker对localhost开了特例,允许HTTP访问,换成其他IP就会触发安全校验,所以才会报错。
下面给你两个可行的解决方案,按需选择:
方案一:让Docker允许该IP的HTTP Registry(快速解决,适合测试环境)
这个方法最直接,把你的Registry IP加入Docker的“不安全注册表”白名单:
找到Docker配置文件:
- Linux:编辑
/etc/docker/daemon.json,如果文件不存在就新建一个 - Windows/macOS:打开Docker Desktop,进入「设置」→「Docker Engine」,直接编辑JSON配置
- Linux:编辑
添加配置内容:
在JSON里加入insecure-registries字段,内容是你的Registry地址:{ "insecure-registries": ["10.118.56.140:5000"] }重启Docker服务:
- Linux:执行
sudo systemctl restart docker - Windows/macOS:在Docker Desktop界面点击「重启」按钮
- Linux:执行
完成后再试docker pull 10.118.56.140:5000/new_buntu,应该就能正常拉取了。
方案二:给Registry配置SSL证书(推荐生产环境)
如果是生产环境使用,更安全的做法是给Registry配置合法的SSL证书,步骤大概是这样:
- 获取SSL证书:可以用Let's Encrypt的免费证书,或者生成自签名证书(自签名的话需要把证书添加到Docker的信任列表)
- 带证书启动Registry:
用以下命令启动Registry,挂载证书目录并指定证书路径:docker run -d \ -p 5000:5000 \ --restart=always \ --name registry \ -v /your/cert/path:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/your-domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/your-domain.key \ registry:latest - 信任证书:如果是自签名证书,需要把证书放到Docker的信任目录,比如Linux下是
/etc/docker/certs.d/10.118.56.140:5000/,Windows/macOS可以在Docker Desktop里配置信任。
额外:查看私有Registry的镜像列表
等你解决了拉取问题后,想要查看Registry里的镜像列表,可以用curl命令:
- 如果是HTTP(方案一):
curl http://10.118.56.140:5000/v2/_catalog - 如果是HTTPS(方案二):
curl https://10.118.56.140:5000/v2/_catalog
返回的JSON里就会列出所有镜像名称。
内容的提问来源于stack exchange,提问作者7_R3X
相关产品推荐
相关产品推荐

