Docker Desktop 国内镜像源配置解决 “failed to authorize“ 问题

言简意赅的讲解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

net/http: TLS handshake timeout

从错误信息来看,问题出在网络连接,尤其是 Docker 拉取镜像时,TLS 握手超时。接着,我们尝试启用全局代理,结果遇到了如下错误:
did not properly respond after a period of time

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 流量,导致连接失败。解决这一问题的方法有三种:

  1. 更换代理软件,确保支持 IPv6。
  2. 设置全局网关代理,使所有流量都通过代理。
  3. 更换为国内镜像源,避免使用外部的 Docker 镜像仓库。

由于我本地使用的是 Clash 作为代理软件,而 Clash 目前对 IPv6 的支持并不完善,而且开发过程中我经常需要同时使用国内和海外的镜像,为了避免每次都遇到 IPv6 连接问题,我最终选择了将国内镜像源和代理软件交替使用的方式。这种方法虽然有点麻烦,但通过合理利用缓存,基本上可以解决问题。对于大部分用户来说,直接切换为国内镜像源应该就能解决问题。

解决方案

要使用国内镜像源,只需简单配置 Docker Desktop 即可。以下是详细步骤:

  1. 打开 Docker Desktop,进入 Settings(设置)。
  2. 选择 Docker Engine 选项。
  3. 在配置文件中添加以下内容,来启用国内镜像源:
{
  "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"
  ]
}
  1. 保存并重新启动 Docker Desktop。

Docker Desktop Engine

解释配置项
  • builder.gc: 用于控制 Docker 构建时的垃圾回收设置,可以调整默认的存储大小。
  • experimental: 设置是否启用实验性功能,通常可以设置为 false
  • registry-mirrors: 列出了多个国内镜像源,Docker 会按照顺序尝试这些镜像源来拉取镜像。这里列出的镜像源包括了腾讯云、DaoCloud 等多个常用的国内镜像源。
总结

通过将 Docker 配置为使用国内镜像源,您可以解决 failed to authorize 的问题,同时提升 Docker 拉取镜像的速度,避免因为网络问题而导致的下载失败。上述方法经过实践验证,应该能够帮助你顺利解决相关问题。不过镜像源的安全性,稳定性我都无法验证。


通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

Best
Wenhao (楠博万)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值