如何将私有组织映像从Docker Hub部署到kubernetes

时间:2019-03-05 05:47:35

标签: docker kubernetes dockerhub

现状

我有一个在DigitalOcean上创建的Kubernetes集群。我想部署一个以私有形式托管的Docker映像,而该私有映像又属于Docker Hub中的组织。

  • Docker Hub组织名称(示例):myorg
  • Docker Hub存储库名称(示例):myorg / mo-server

因此,为了推送新图像,我使用docker push myorg/mo-server

(注意:上面的示例在图像名称中也包含一个破折号(-),我也使用真实姓名)

问题

当我尝试使用kubectl将该docker映像部署到kubernetes时,部署总是以状态ErrImagePull结束。错误消息:

ailed to pull image "index.docker.io/myorg/mo-server": rpc error: code = Unknown desc = Error response from daemon: pull access denied for myorg/mo-server, repository does not exist or may require 'docker login'

到目前为止我尝试过的事情

因为它是一个私人存储库,所以我事先创建了一个秘密。为此,我使用了自己的用户名和电子邮件。

set DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
set DOCKER_USER=sarensw
set DOCKER_EMAIL=stephan@myorg.com
set DOCKER_PASSWORD=...

凭据与我使用docker login时的凭据相同。然后,我使用以下方法创建一个秘密:

kubectl create secret docker-registry regcred 
  --docker-server=%DOCKER_REGISTRY_SERVER% 
  --docker-username=%DOCKER_USER% 
  --docker-password=%DOCKER_PASSWORD% 
  --docker-email=%DOCKER_EMAIL%

然后,我使用kubectl create创建一个新的部署。

kubectl create -f ci\helper\kub-deploy-staging.yaml

kub-deploy-staging.yaml如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mo-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mo-server
  template:
    metadata:
      labels:
        app: mo-server
    spec:
      containers:
        - name: mo-server
          image: index.docker.io/myorg/mo-server
          imagePullPolicy: Always
          command: [ "echo", "SUCCESS" ]
      imagePullSecrets:
        - name: regcred

如上所述,结果为ErrImagePull

我非常确定image: index.docker.io/myorg/mo-server是罪魁祸首,因为它是我尝试在普通帐户中使用的组织形象。而且所有访问私有映像的教程都没有考虑组织。

那我在做什么错了?

(许多类似的参考文献之一): https://gist.github.com/rkuzsma/b9a0e342c56479f5e58d654b1341f01e

2 个答案:

答案 0 :(得分:0)

我怀疑这是由于您用来创建秘密的docker注册表变量而引起的,请尝试用index.docker.io替换registry.hub.docker.com,因为这是官方dockerhub注册表URL。如果您使用的是Google Cloud,也可以尝试docker.io

答案 1 :(得分:0)

如我所见,您正在尝试使用“ set”命令设置变量,请立即按照您在gist文件中提到的“ export”尝试操作

export DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
export DOCKER_USER=Type your dockerhub username, same as when you `docker login`
export DOCKER_EMAIL=Type your dockerhub email, same as when you `docker login`
export DOCKER_PASSWORD=Type your dockerhub pw, same as when you `docker login`

kubectl create secret docker-registry myregistrykey \
  --docker-server=$DOCKER_REGISTRY_SERVER \
  --docker-username=$DOCKER_USER \
  --docker-password=$DOCKER_PASSWORD \
  --docker-email=$DOCKER_EMAIL

然后重试,让我们知道结果。