从私有dockerhub注册表中提取Docker映像时,Kubernetes中出现ImagePullBackOff错误

时间:2019-03-14 13:11:30

标签: docker azure-devops azure-pipelines dockerhub azure-kubernetes

我尝试使用Azure Devops构建CI / CD管道。 我的目标是

  1. 构建docker映像并将其上传到CI管道内Dockerhub中的私有docker仓库中

  2. 将此映像部署到CD管道中的Azure Kubernetes群集

CI管道运行良好: enter image description here

图像已成功推送到dockerhub enter image description here

管道docker push任务:

steps:
- task: Docker@1
  displayName: 'Push an image'
  inputs:
    containerregistrytype: 'Container Registry'
    dockerRegistryEndpoint: DockerHubConnection
    command: 'Push an image'
    imageName: 'jastechgmbh/microservice-demo:$(Build.BuildId)'

之后,我手动触发发布管道,它也显示成功 enter image description here

应用管道任务:

steps:
- task: Kubernetes@0
  displayName: 'kubectl apply'
  inputs:
    kubernetesServiceConnection: MicroserviceTestClusterConnection
    command: apply
    useConfigurationFile: true
    configuration:   '$(System.DefaultWorkingDirectory)/_MicroservicePlayground-MavenCI/drop/deployment.azure.yaml'
    containerRegistryType: 'Container Registry'
    dockerRegistryConnection: DockerHubConnection

但是当我在kubernetes仪表板上检查部署时,会弹出错误消息: enter image description here

无法提取映像“ jastechgmbh / microservice-demo:38”:rpc错误:代码=未知desc =来自守护程序的错误响应:对jastechgmbh / microservice-demo的提取访问被拒绝,存储库不存在或可能需要'docker login':拒绝:请求的对资源的访问被拒绝

我在CI和CD管道中使用相同的dockerhub服务连接。

enter image description here

很高兴您的帮助。

3 个答案:

答案 0 :(得分:1)

我相信此错误表明您的kubernetes集群无法访问docker注册表。您需要为此创建docker secret。像这样:

kubectl create secret generic regcred \
  --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
  --type=kubernetes.io/dockerconfigjson

或从命令行:

kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

答案 1 :(得分:1)

上面的答案是正确的,只需添加您必须将imagePullsecrets放在部署中即可。阅读其他答案上提供的链接,它会对其进行详细说明:

https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

答案 2 :(得分:0)

为现有AKS集群配置ACR集成

az aks更新-n myAKSClusterName -g myAKSResourceGroupName --attach-acr acr名称

https://docs.microsoft.com/en-us/azure/aks/cluster-container-registry-integration

为我解决了这个问题