Maven jib:dockerBuild在Ubuntu上(以及在Windows wsl2中)对非root用户失败



更新:我通过以下链接完全删除了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

返回令牌

如果您提供了错误的用户名或密码,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

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

此命令导致了问题:

gcloud auth configure-docker`

通过使用

gcloud auth configure-docker eu.gcr.io 

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

最新更新