生成docker映像失败,原因是无法获取匿名令牌,TLS握手超时



我在使用docker build -t image_name .创建docker映像时遇到问题。当我执行它时,我会得到错误:

=> [internal] load build definition from Dockerfile                                                               0.1s
=> => transferring dockerfile: 32B                                                                                0.0s
=> [internal] load .dockerignore                                                                                  0.0s
=> => transferring context: 2B                                                                                    0.0s
=> ERROR [internal] load metadata for docker.io/library/java:8                                                    0.2s
------
> [internal] load metadata for docker.io/library/java:8:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch anonymous token: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fjava%3Apull&service=registry.docker.io: net/http: TLS handshake timeout

最近我在运行earthy/earthly的构建脚本时遇到了这种情况。

OS:Arch Linux5.14.8-arch1-1

来自官方存储库的Docker:Docker version 20.10.8, build 3967b7d28e

解决方案(可能是仅限Linux的解决方案(

DNS对我的配置不正确。由于某种原因,docker pull golang:1.16-alpine3.14运行良好,但在运行构建脚本时失败了。r/docker上的这个答案起到了帮助作用。

在我的/etc/resolv.conf中添加DNS名称服务器为我解决了这个问题:

cat /etc/resolv.conf
# Cloudflare
nameserver 1.1.1.1

其他尝试的解决方案

1.禁用Buildkit

从这个答案到Docker构建:无法为openjdk获取oauth令牌?,这并没有解决问题,因为我认为我运行的脚本需要构建工具包:

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0

2.手动拉取图像

3.使用Docker进行身份验证

这个错误看起来像是我未通过hub.docker.com验证时可能发生的事情。在使用docker login --username <username>登录后,我仍然收到了错误。

如果您使用MacOS,请检查是否有任何类型的系统扩展可以拦截流量,例如防火墙、vpn客户端、安全工具。在终端应用程序中运行systemextensionsctl list

1 extension(s)
--- com.apple.system_extension.network_extension
enabled active  teamID  bundleID (version)  name    [state]
*   *   78UFGP42EU  ch.tripmode.TripMode.FilterExtension (3.1.0/1304)   FilterExtension [activated enabled]

在我的案例中,应用程序TripMode是问题的原因。卸载该工具并重新启动系统解决了此问题。

正在回答关于在resolv.conf中设置DNS的问题,但我显然没有足够的声誉发表评论。一些Linux应用程序直接读取resolv.conf,而不使用systemd-resolved(默认情况下由Arch使用(。您可以通过将/etc/resolv.conf替换为指向systemd解析的DNS存根文件的链接来解决此问题,如ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

本文档的DNS部分对此进行了介绍https://wiki.archlinux.org/title/Systemd-resolved

最新更新