【问题标题】:How to deploy private organization image from docker hub to kubernetes如何将私有组织镜像从 docker hub 部署到 kubernetes
【发布时间】:2019-03-05 19:00:21
【问题描述】:

现状

我在 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

【问题讨论】:

  • 图片上没有标签?
  • 我有。我试过有无。

标签: docker kubernetes dockerhub


【解决方案1】:

我怀疑这是因为您创建了秘密的 docker 注册表变量,请尝试将 index.docker.io 替换为 registry.hub.docker.com,因为这是官方的 dockerhub 注册表 URL。如果你使用的是谷歌云,你也可以试试docker.io

【讨论】:

  • 就是这样。我不得不使用registry.hub.docker.com。花了我这么长时间。谢谢!
【解决方案2】:

我看到您正在尝试使用“set”命令设置变量,现在请尝试使用“export”,如您关注的gist 文件中所述

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

然后再试一次,请告诉我们结果。

【讨论】:

  • 我在 Windows 上,因此我使用 set 而不是 export。这不是问题。我可以看到秘密已成功创建。而且我也在没有系统变量的情况下做到了。没有运气。
  • 好的,那么我想如果您的用户对该组织存储库具有写入权限,它应该可以正常工作。而且我没有在 Windows 上尝试,我在 Linux 上尝试过,它工作得很好
猜你喜欢
  • 2023-02-20
  • 1970-01-01
  • 2015-12-17
  • 2019-08-28
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多