【日常小问】解决Docker拉取镜像报错:alpine:latest

69 阅读2分钟

 一、问题出现

在执行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 .