Ubuntu虚拟机中Docker Pull遇连接拒绝问题(企业代理环境)
解决Docker在企业代理环境下pull镜像连接拒绝的问题
我之前在企业代理环境里折腾Docker镜像拉取时,碰到过完全一样的连接拒绝问题,试了好几种方法才搞定,给你几个靠谱的解决方向:
1. 直接给Docker Daemon配置代理(最推荐)
Docker Daemon是独立的系统服务,proxychain这类工具通常只能拦截用户进程的请求,没法覆盖Daemon的网络流量,所以直接给Docker配置代理才是根本解决方案:
- 先创建Docker服务的配置目录:
sudo mkdir -p /etc/systemd/system/docker.service.d - 新建代理配置文件
http-proxy.conf:sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf - 在文件中填入你的代理信息(替换成实际的代理地址、用户名、密码和端口,注意特殊字符要URL编码,比如
@转成%40,#转成%23):[Service] Environment="HTTP_PROXY=http://your-proxy-user:your-proxy-pass@proxy-host:proxy-port/" Environment="HTTPS_PROXY=http://your-proxy-user:your-proxy-pass@proxy-host:proxy-port/" Environment="NO_PROXY=localhost,127.0.0.1,192.168.0.0/16" - 重新加载systemd配置并重启Docker:
sudo systemctl daemon-reload sudo systemctl restart docker - 验证代理是否生效:
如果输出里能看到你设置的HTTP/HTTPS代理,就说明配置成功了,再试试docker info | grep -i proxydocker pull busybox应该就能正常拉取了。
2. 用Proxychain的话,需要调整Docker网络模式
如果你一定要用proxychain,得让Docker的网络请求走主机网络,这样proxychain才能拦截到:
- 先检查
/etc/proxychains.conf里的代理配置是否正确,确保[ProxyList]下已经添加了你的企业代理:http proxy-host proxy-port your-proxy-user your-proxy-pass - 然后用
--net=host参数让Docker共享主机网络,再通过proxychain执行pull命令:
或者先测试连通性:sudo proxychains docker pull --net=host busyboxsudo proxychains docker run --net=host busybox curl https://registry-1.docker.io/v2/
3. 排查代理本身的问题
如果上面两种方法都不行,先排除代理本身的问题:
- 直接用proxychain测试能不能访问Docker镜像仓库:
如果这个请求也失败,那可能是:sudo proxychains curl https://registry-1.docker.io/v2/- 代理的用户名密码有误,或者特殊字符没转义
- 企业代理需要将Docker仓库地址加入白名单
- 代理端口或者地址填错了
内容的提问来源于stack exchange,提问作者Μenelaοs
相关产品推荐
相关产品推荐

