我正在尝试从我的Jenkins推送到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")
推送失败,并显示以下输出:
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
7条答案
按热度按时间lxkprmvk1#
这个问题的根本原因是您的docker守护进程没有使用推送到gcr.io所需的凭据进行身份验证。对于最初的问题,我认为这很可能是因为使用的用户帐户是
_token
而不是oauth2accesstoken
。我遇到了一个类似的错误,除了我使用的是
docker-credential-gcr
而不是docker login
,并且得到了相同的unexpected EOF
错误。我的问题是我运行在GCE上,
docker-credential-gcr
通过GCE元数据API从GCE检测和使用不同的服务帐户。因此,对于运行在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/....
希望能帮上忙。
wbgh16ku2#
检查标记中是否使用了正确的projectID,因为它已在Cannot push image to repository in Google Container Engine中解决
g9icjywg3#
对于那些在将构建推送到GCR时遇到问题的人来说,我的错误在于我使用了项目名称而不是项目ID。
感谢https://forums.docker.com/t/cannot-push-image-to-repository-in-google-container-engine/12662帮助我进行排序
23c0lvtd4#
在我的例子中,我观察到一个类似的“重试”问题时,试图以各种方式推到GCR,已安装Jenkins的GKE每个谷歌云服务packaged tutorial。
我使用默认的服务帐户来处理这个问题。这继承了GCE集群OAuth作用域,默认情况下,这些作用域没有云存储的写入权限。Google云控制台在Kubernetes集群的权限下显示了这一点。它显示
Storage: Read Only
,不幸的是它不能更改。最后,我按照this excellent article中的描述添加了一个新的节点池,然后删除了原来的节点池。
完成此操作后,推送工作正常,GKE集群上的Permissions列表显示
Storage: Read Write
。n3ipq98p5#
或者,也可以通过以下命令使用密钥文件进行Docker登录并推送到注册表:
这对我很有效。
pxy2qtax6#
执行此命令并更新docker中的config.json
des4xlb07#
请检查是否
sh“docker构建版本--无缓存-t $图像标记:$版本。”
解决它