0

更新:我通过以下链接完全删除了 Docker: https ://askubuntu.com/a/1021506

然后我像这样重新安装了 Docker: https ://docs.docker.com/engine/install/ubuntu/

重新安装后,mvn jib:dockerBuild在没有 sudo 的情况下工作。

运行时gcloud auth configure-docker,它被添加到 .docker/config.json

       "credHelpers": {
                "asia.gcr.io": "gcloud",
                "eu.gcr.io": "gcloud",
                "gcr.io": "gcloud",
                "marketplace.gcr.io": "gcloud",
                "staging-k8s.gcr.io": "gcloud",
                "us.gcr.io": "gcloud"
        }

并且问题再次出现。在 config.json 中手动删除上述部分可以mvn jib:dockerBuild再次工作。


运行以下命令

mvn jib:dockerBuild

一个普通的 Micronaut 3.0.2 项目给出了这个输出:

[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:2.7.1:dockerBuild (default-cli) on project barn-validation-step: Build to Docker daemon failed, perhaps you should make sure your credentials for 'registry-1.docker.io/library/openjdk' are set up correctly. See https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#what-should-i-do-when-the-registry-responds-with-unauthorized for help: Unauthorized for registry-1.docker.io/library/openjdk: 401 Unauthorized
[ERROR] GET https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/openjdk:pull
[ERROR] {"details":"incorrect username or password"}

当使用与 sudo 相同的命令时:

sudo env "PATH=$PATH" mvn jib:dockerBuild

构建成功。在 Azure Pipelines 中使用 Maven 步骤时,构建也成功。

我已阅读错误消息中 URL 的内容。我还花了几个小时在其他地方寻找解决方案,到目前为止还没有运气。

我可以使用docker login, 和

curl https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/openjdk:pull

返回一个令牌

4

2 回答 2

1

如果您提供错误的用户名或密码,Docker Hub 将返回以下错误消息:

$ docker login -u foo -p bar
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password

请注意您在运行 Jib 时看到的相同消息。消息来自 Docker Hub:

[ERROR] {"details":"incorrect username or password"}

同样从有效的事实来看sudo env "PATH=$PATH" mvn jib:dockerBuild,一定是在您的本地用户环境中运行的 Jib 使用了不同的用户名和密码信息。

Jib 搜索各种位置以检索注册表凭据(这只是一个用户名和密码对),因此 Jib 在以 root 身份运行和以您的用户身份运行时获取的凭据必须不同。如文档中所述,Jib 日志将显示它在何处获取凭据。例如,

Using credentials from Docker config (/home/user/.docker/config.json) for localhost:5000/java

或者

Using credential helper docker-credential-gcr for gcr.io/project/repo

检查日志以识别凭据的来源并修复它们。

于 2021-10-06T21:36:17.390 回答
0

这个命令引起了麻烦:

gcloud auth configure-docker`

通过使用

gcloud auth configure-docker eu.gcr.io 

相反,一切都如所描绘的那样工作。原因似乎是使用后一个命令,Jib 基础映像存储库和我的目标存储库(位于 eu.gcr.io 内部)之间没有冲突。

于 2021-10-07T11:44:02.603 回答