Maven jib:dockerBuild 在 Ubuntu 上对非 root 用户失败(在 Windows wsl2 中也是如此)

Maven jib:dockerBuild fails for non-root user on Ubuntu (and in Windows wsl2 as well)

更新:我按照以下 link 完全删除了 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

returns一个令牌

如果您提供了错误的用户名或密码,Docker Hub returns 会出现以下错误信息:

$ 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 中心:

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

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

Jib 搜索 various locations 以检索注册表凭据(这只是用户名和密码对),因此必须是 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

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

这个命令引起了问题:

gcloud auth configure-docker`

通过使用

gcloud auth configure-docker eu.gcr.io 

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