Docker构建:无法获取openjdk的oauth令牌,导致构建失败。

44

我在尝试在Docker中构建项目时遇到了这个错误,但是我很难理解它:

> [internal] load metadata for docker.io/library/openjdk:11:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch oauth token: unexpected status: 401 Unauthorized'

这个错误具体是什么意思?我是否缺少权限?

供参考,这是我的Dockerfile内容:

### base jdk image ###
FROM openjdk:11 as setup
ENV USER sc_user
ENV HOME /home/$USER
ENV REPO $HOME/sc
RUN useradd -u 9999 $USER
COPY --chown=$USER build.gradle gradlew $REPO/
COPY --chown=$USER gradle $REPO/gradle
USER $USER
WORKDIR $REPO
RUN ./gradlew

FROM setup as tdd
ENTRYPOINT ["./gradlew", "-t", "test"]

FROM setup as debug-tdd
ENTRYPOINT ["./gradlew", "-t", "test", "-PjvmArgs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005"]

### build jar ###
FROM setup as build
COPY --chown=$USER src $REPO/src
RUN ./gradlew clean test build generatePomFileForMavenJavaPublication

当您创建或更新Docker AccessToken时,此错误也会出现。 在客户端注销/登录后,它将再次正常工作。 - Peter Kirschner
11个回答

126

看起来您的Docker配置启用了BuildKit。BuildKit可能会引起这些类型的问题。请尝试禁用BuildKit后再次尝试。

在Linux中,使用环境变量:

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0
在 Windows 和 macOS 中,启动 Docker Desktop 应用程序,转到 设置,选择 Docker 引擎 并查找现有条目:
"buildkit": true

更改此条目以禁用Buildkit:

"buildkit": false

然后点击 应用并重启,再次尝试。


2
是的!"buildkit": false 救了我!非常感谢! - Steve Zhang
3
因此我一直在抓耳挠腮,非常感谢。 - Rahul Bhooteshwar
5
如果有意启用了BUILDKIT,应该如何解决错误? DOCKER_BUILDKIT=1 docker build --target artifact --output type=local,dest=. .。这个错误是否可能是由于在代理后面执行命令引起的? - AlainD.
2
回复自己,设置了Docker桌面版和系统环境变量中的代理后,这个错误就消失了。 - AlainD.
@AdainD - 我的代理设置正确,但我确认我的wget | curl不起作用。这与代理有关。你是对的。 - Peter
显示剩余5条评论

31

在我的Mac上更新Docker版本后,我也遇到了这个问题。然而,通过从终端重新登录,我解决了这个问题。

命令如下:

docker login

之后我必须提供 Docker Hub 的用户名密码。问题已经解决。

请注意,如果您使用自定义注册表,则必须运行docker login <registry>代替。


1
我登录了Docker应用程序,它可以正常工作。 - thisshri
对我没用。登录成功但仍然无法解决前端dockerfile.v0的问题:无法创建LLB定义:授权失败:rpc错误:代码=未知,描述=无法获取oauth令牌:意外状态:405方法不允许。 - Rohit
@Rohit 你在使用 Mac 吗?你的电脑上安装了 Docker Desktop 应用程序吗? - Zakaria
两者都是肯定的。 - Rohit
@Rohit,你是否同时在Docker桌面应用程序和终端中登录了?如果是的话,可能还有另一种情况。我曾经也遇到过这种奇怪的问题,原因是我的互联网服务提供商。我不知道你的情况是什么? - Zakaria

6
如果您在2021年8月31日之后订阅了Docker,面临此问题,那么这意味着您需要登录Docker Hub来执行操作。
可以使用Docker桌面应用程序中的docker login或从终端使用docker login命令。
如果之前没有创建过Docker帐户,则可以在此处注册个人(免费)计划 - https://hub.docker.com/ 或使用组织提供给您的Docker帐户(如果有)。
订阅更改信息在此处提到 - https://docs.docker.com/subscription/

2
这对我有用,我必须登录我的Docker桌面。 - Mabel Oza

6

我在MAC上使用 Docker Desktop 时,只需要注销并重新登录,就能正常使用。


3
首先,如果您已登录,请注销并重新登录:$ docker logout $ docker login 提供您的凭据。
如果您正在某种docker工厂或组织内工作:$ docker login #link_of_the_artifactory_here

2

我的情况:

在Windows 10上使用Linux WSL2的Docker。

镜像是ubuntu:focal。

我必须进入Docker桌面版的故障排除部分,并使用“清除/清除数据”选项。 之前我尝试过“恢复出厂设置”,但只是让错误信息多了一行,没有解决问题。所以可能两个都需要。

然后我重新启动了Docker,'Voilà'


清理/清除数据对我很有用。 - undefined

1

我的情况:

在 Windows 10 上使用 Linux WSL2 运行 Docker。

我刚刚执行了 docker logout 命令,它起作用了。我记得有一段时间我曾经执行过 docker login 命令。因此,即使对于公共镜像,Docker 也会强制进行身份验证。唯一的解决方法是要么重新登录,要么执行 docker logout 命令。我执行了 docker logout 命令,它起作用了。


0
在我的情况下,我的组织(在DockerHub上)阻止了该镜像。当关闭构建工具时,我收到了一个相应的易于理解的错误消息。

0

对于Windows系统,您需要首先登录Docker桌面版才能工作。


0

对于我在Windows上,只需重新启动Docker即可解决问题。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接