推送到Google容器注册表失败:重试

Jac*_*cob 5 jenkins docker docker-registry google-container-registry jenkins-pipeline

我正在尝试从我的詹金斯推送到Google容器注册表。该构建在Kubernetes Jenkins插件中运行,该插件使用gcr.io/cloud-solutions-images/jenkins-k8s-slave将Docker映像构建到Kubernetes本机Docker中。

在对Google容器注册表进行身份验证之后,我尝试推送新生成的映像。这是我的管道脚本:

def imageTag = 'gcr.io/project-id/tag'

def version = version from pom 

sh './mvnw package'

sh "docker build -t $imageTag:$version ."

sh('gcloud auth activate-service-account --key-file=$FILE')

sh('docker login -p $(gcloud auth print-access-token) -u _token https://gcr.io')

sh("gcloud docker -- push $imageTag:$version")
Run Code Online (Sandbox Code Playgroud)

推送失败,并显示以下输出:

c6ff94654483: Preparing
209db64c273a: Preparing
762429e05518: Preparing
2be465c0fdf6: Preparing
5bef08742407: Preparing
c6ff94654483: Retrying in 5 seconds
5bef08742407: Retrying in 5 seconds
209db64c273a: Retrying in 5 seconds
2be465c0fdf6: Layer already exists
762429e05518: Layer already exists
c6ff94654483: Retrying in 4 seconds
5bef08742407: Retrying in 4 seconds
209db64c273a: Retrying in 4 seconds
c6ff94654483: Retrying in 3 seconds
5bef08742407: Retrying in 3 seconds
209db64c273a: Retrying in 3 seconds
c6ff94654483: Retrying in 2 seconds
5bef08742407: Retrying in 2 seconds
209db64c273a: Retrying in 2 seconds
c6ff94654483: Retrying in 1 second
5bef08742407: Retrying in 1 second
209db64c273a: Retrying in 1 second
5bef08742407: Retrying in 10 seconds
...
unexpected EOF
Run Code Online (Sandbox Code Playgroud)

Don*_*ing 3

此问题的根本原因是您的 docker 守护程序未使用推送到 gcr.io 所需的凭据进行身份验证。对于最初的问题,我认为这可能是因为正在使用的用户帐户_token不是oauth2accesstoken.

我遇到了与此类似的错误,只不过docker login我没有使用 ,而是使用了docker-credential-gcr并且遇到了相同的unexpected EOF错误。

我的问题是我在 GCE 上运行,docker-credential-gcr通过 GCE 元数据 API 检测和使用不同的服务帐户。

因此,对于在 GCP 上运行并尝试通过 验证服务帐户的其他遇到此问题的人docker-credential-gcr,您需要告诉它仅查看gcloud凭据,而不是查看环境中的元数据 API 详细信息。我的流程现在看起来像这样:

gcloud auth activate-service-account --key-file=$FILE

docker-credential-gcr configure-docker --token-source="gcloud"

docker push gcr.io/....

希望它能帮助某人。