言简意赅的讲解Docker国内镜像源解决的痛点
在上一篇文章中,我介绍了 Docker 的一些基础使用和常见问题。童鞋们在使用期间肯定还会遇到更多的问题,比如我现在遇到的镜像源问题分享给你们。
Docker Desktop 国内镜像源配置解决 “failed to authorize” 问题
在使用 Docker Desktop 时,有时候会遇到 failed to authorize
的错误。这让很多用户误以为是因为没有登录 Docker 导致的,但实际上并非如此。本文将通过分析具体的错误信息,帮助你解决这个问题,特别是在使用国内镜像源时。
问题描述
在构建镜像的过程中,出现了如下报错:
failed to solve: maven:3.8.5-openjdk-8: failed to authorize: failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Alibrary%2Fmaven%3Apull&service=registry.docker.io": net/http: TLS handshake timeout
从错误信息来看,问题出在网络连接,尤其是 Docker 拉取镜像时,TLS 握手超时。接着,我们尝试启用全局代理,结果遇到了如下错误:
failed to solve: node:18-alpine: failed to authorize: failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Alibrary%2Fnode%3Apull&service=registry.docker.io": dial tcp [2a03:2880:f107:83:face:b00c:0:25de]:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
仔细分析后发现, dial tcp [2a03:2880:f107:83:face:b00c:0:25de]:443
这一部分。这里的 2a03:2880:f107:83:face:b00c:0:25de
是一个 IPv6 地址。部分代理无法成功转发 IPv6 流量,导致连接失败。解决这一问题的方法有三种:
- 更换代理软件,确保支持 IPv6。
- 设置全局网关代理,使所有流量都通过代理。
- 更换为国内镜像源,避免使用外部的 Docker 镜像仓库。
由于我本地使用的是 Clash 作为代理软件,而 Clash 目前对 IPv6 的支持并不完善,而且开发过程中我经常需要同时使用国内和海外的镜像,为了避免每次都遇到 IPv6 连接问题,我最终选择了将国内镜像源和代理软件交替使用的方式。这种方法虽然有点麻烦,但通过合理利用缓存,基本上可以解决问题。对于大部分用户来说,直接切换为国内镜像源应该就能解决问题。
解决方案
要使用国内镜像源,只需简单配置 Docker Desktop 即可。以下是详细步骤:
- 打开 Docker Desktop,进入
Settings
(设置)。 - 选择
Docker Engine
选项。 - 在配置文件中添加以下内容,来启用国内镜像源:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://ccr.ccs.tencentyun.com",
"https://docker.rainbond.cc",
"https://elastic.m.daocloud.io",
"https://elastic.m.daocloud.io",
"https://docker.m.daocloud.io",
"https://gcr.m.daocloud.io",
"https://ghcr.m.daocloud.io",
"https://k8s-gcr.m.daocloud.io",
"https://k8s.m.daocloud.io",
"https://mcr.m.daocloud.io",
"https://nvcr.m.daocloud.io",
"https://quay.m.daocloud.io"
]
}
- 保存并重新启动 Docker Desktop。
解释配置项
builder.gc
: 用于控制 Docker 构建时的垃圾回收设置,可以调整默认的存储大小。experimental
: 设置是否启用实验性功能,通常可以设置为false
。registry-mirrors
: 列出了多个国内镜像源,Docker 会按照顺序尝试这些镜像源来拉取镜像。这里列出的镜像源包括了腾讯云、DaoCloud 等多个常用的国内镜像源。
总结
通过将 Docker 配置为使用国内镜像源,您可以解决 failed to authorize
的问题,同时提升 Docker 拉取镜像的速度,避免因为网络问题而导致的下载失败。上述方法经过实践验证,应该能够帮助你顺利解决相关问题。不过镜像源的安全性,稳定性我都无法验证。
通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强
Best
Wenhao (楠博万)