一、问题出现
在执行docker build命令时,Docker无法从Docker Hub拉取alpine:latest基础镜像。
ERROR: failed to build: failed to solve: alpine:latest: failed to resolve source metadata for docker.io/library/alpine:latest: unable to fetch descriptor
编辑
二、问题原因
这种问题一旦遇到就需要结合各种大模型,很多时候使用了很多方法可能都没有解决。当然,有些时候也会因为一些巧合解决好这些问题。
1.网络连接问题
Docker daemon 无法正常访问 Docker Hub 官方镜像仓库。
2.可能的具体原因
网络不稳定或超时;防火墙/代理阻止访问;Docker Hub 服务暂时不可达;本地 Docker 镜像缓存损坏。
三、问题解决
1.WSL 宿主机代理转发配置
它的作用是自动获取宿主机(Windows)的 IP 地址,并将代理指向宿主机,从而让 WSL 里的网络请求走 Windows 上的代理软件。
注意:这段代码不能在 Windows CMD 或 PowerShell 中运行。
如果您是在 WSL (Ubuntu/Debian) 中使用,请按照以下步骤将其“永久植入”您的系统:
(1)进入 WSL 环境
在您的终端中输入 wsl 并回车,确保您现在的命令提示符是 Linux 样式的(例如 root@xxx:~#)。
(2)编辑 Shell 配置文件
我们将这段代码添加到 .bashrc 文件中,这样每次打开终端都能使用 proxy 命令。
在 WSL 终端中运行:
nano ~/.bashrc
(3)粘贴代码
使用键盘方向键移动到文件的最底部,然后粘贴以下优化后的代码:
注意:请核对端口号
# 自动获取宿主机 Windows 的 IP
host_ip=$(ip route show | grep -i default | awk '{ print $3}')
# 定义别名:输入 'proxy' 开启代理
alias proxy="export ALL_PROXY="http://$host_ip:10809"; export HTTPS_PROXY="http://$host_ip:10809"; export HTTP_PROXY="http://$host_ip:10809"; echo "✅ Proxy set to $host_ip:10809""
# 定义别名:输入 'unproxy' 关闭代理
alias unproxy="unset ALL_PROXY; unset HTTPS_PROXY; unset HTTP_PROXY; echo "❌ Proxy unset""
(4)保存并退出
按 Ctrl + O 保存。
按 Enter 确认文件名。
按 Ctrl + X 退出编辑器。
(5)立即生效
运行以下命令让刚才的修改生效:
source ~/.bashrc
(6)如何使用
现在,您可以在 WSL 终端里随时控制代理了:
开启代理:输入 proxy
关闭代理:输入 unproxy
检查状态:输入 echo $HTTP_PROXY
2.清理 Docker 缓存并重试
重新输入以下代码:
# 清理构建缓存
docker builder prune -a
# 清理所有未使用的镜像
docker image prune -a
# 手动拉取镜像测试
docker pull alpine:latest
# 重新构建
docker build -t xxx -f Dockerfile.xxx .