设置了代理,在国内拉取docker pull mongo依然失败
原因是:Docker 不吃你在 Xubuntu 里设置的终端代理环境变量。
下面我把原因 → 正确解决方案 → 最稳的国内方案一次性讲清楚。
一、为什么你设置了代理,docker pull mongo 还是失败?
关键点(一定要记住):
docker pull 走的是 Docker daemon(dockerd),不是你的 shell
也就是说:
你在终端里:
bash
复制代码
export http_proxy=...
只对 curl / apt / wget 生效
对 docker pull 完全无效
因为:
docker pull → 请求是 dockerd 进程发出的
dockerd 不继承你的终端环境变量
所以在国内就会出现:
curl 能访问外网
docker pull 一直 timeout / connection reset
二、方案一(推荐):配置 Docker daemon 走代理 ✅
这是官方正确做法。
1️⃣ 创建 Docker systemd 代理目录
bash
复制代码
sudo mkdir -p /etc/systemd/system/docker.service.d
2️⃣ 写入代理配置
假设你的代理是:
cpp
复制代码
http://127.0.0.1:7890
创建文件:
bash
复制代码
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
内容如下(按你真实代理改):
ini
复制代码
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
保存退出。
3️⃣ 重新加载并重启 Docker
bash
复制代码
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker
4️⃣ 验证 Docker 是否真的吃到了代理
bash
复制代码
docker info | grep -i proxy
如果看到类似:
javascript
复制代码
HTTP Proxy: http://127.0.0.1:7890
HTTPS Proxy: http://127.0.0.1:7890
✅ 说明配置成功
5️⃣ 再次拉取 MongoDB
bash
复制代码
docker pull mongo:7.0
👉 这一步在国内 90% 情况可以成功
三、方案二(国内最稳):直接用国内 Docker 镜像源 🚀(强烈推荐)
即使你有代理,我也强烈建议你加国内镜像源,更快、更稳。
1️⃣ 编辑 Docker daemon 配置
bash
复制代码
sudo nano /etc/docker/daemon.json
填入(可全部复制):
json
复制代码
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://mirror.ccs.tencentyun.com",
"https://hub-mirror.c.163.com"]
}
2️⃣ 重启 Docker
bash
复制代码
sudo systemctl restart docker
3️⃣ 拉取 MongoDB(不需要代理也能成功)
bash
复制代码
docker pull mongo:7.0
✅ 这是国内成功率最高方案
四、推荐你用的最终组合方案(最稳)
✅ Docker daemon 代理 + 国内镜像源
代理:应对非镜像流量
镜像源:极快、极稳