Windows7+VirtualBox5.2下Docker代理配置后拉取镜像报错求助
我来帮你搞定这个问题!从报错信息和你的配置来看,主要是代理配置的两个细节出了问题,咱们一步步修正:
1. 先修正最明显的拼写错误
你在导出环境变量时把NO_PROXY写成了NO_PROXT——这个拼写错误会导致本该绕过代理的本地Docker Machine地址(192.168.99.1/24)被强制走代理,直接引发了后续的TLS握手异常。
2. 修正HTTPS_PROXY的协议类型
你的报错proxyconnect tcp: tls: first record does not look like a TLS handshake,核心原因是:你给HTTPS_PROXY设置了https://xxx:80,但大多数企业代理的80端口是HTTP协议,不是HTTPS。
当Docker daemon尝试通过代理访问Docker Hub时,它给代理服务器发送了TLS握手请求,但代理期待的是HTTP请求,自然就报错了。你需要把HTTPS_PROXY的协议改成http://,即使是访问HTTPS站点,代理和客户端之间的连接依然是HTTP的。
3. 重新配置Docker Machine并设置正确的环境变量
步骤1:删除现有有问题的default机器
docker-machine rm default
步骤2:用正确参数重新创建机器
docker-machine create -d virtualbox \ --engine-env HTTP_PROXY="http://xxx:80" \ --engine-env HTTPS_PROXY="http://xxx:80" \ --engine-env NO_PROXY="192.168.99.1/24,localhost,127.0.0.1" \ default
这里额外加上了localhost和127.0.0.1到NO_PROXY里,避免本地请求也走代理。
步骤3:重新加载正确的环境变量
Windows下可以直接执行Docker Machine输出的激活命令:
& "C:\Program Files\Docker Toolbox\docker-machine.exe" env default | Invoke-Expression
如果手动设置的话,确保变量名和值都正确:
set HTTP_PROXY=http://xxx:80 set HTTPS_PROXY=http://xxx:80 set NO_PROXY=192.168.99.1/24,localhost,127.0.0.1
4. 验证配置并重启Docker服务
进入Docker Machine内部检查配置:
docker-machine ssh default
查看代理配置文件:
cat /var/lib/boot2docker/profile
确认里面的HTTP_PROXY、HTTPS_PROXY、NO_PROXY没有拼写错误,协议也正确。然后重启Docker服务:
sudo /etc/init.d/docker restart
完成这些步骤后,再执行docker run hello-world应该就能正常拉取镜像了!
内容的提问来源于stack exchange,提问作者Anant Pukale

