【问题标题】:Pulling private image from docker hub using minikube使用 minikube 从 docker hub 拉取私有镜像
【发布时间】:2017-04-24 21:30:24
【问题描述】:

我在 macOS 10.12 上使用 minikube 并尝试使用托管在 docker hub 上的私有映像。我知道 minikube 会启动一个 VM,据我所知,它将是我本地 kubernetes 集群的唯一节点,它将托管我所有的 pod。

我读到我可以通过运行 eval $(minikube docker-env) 来使用 VM 的 docker 运行时。所以我使用这些变量从我的本地 docker 运行时更改为另一个。运行docker images 可以看到更改已有效完成。

我的下一步是使用docker login 在 docker hub 登录,然后手动拉取我的图像,最终没有错误。在那之后,我认为该图像将准备好被集群中的任何 pod 使用,但我总是得到ImagePullBackOff。我还尝试通过minikube ssh ssh 进入虚拟机,结果是一样的,图像可以使用,但由于某种原因我不知道它拒绝使用它。

如果有帮助,这是我的部署描述文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 1
template:
  metadata:
    labels:
      app: nginx
  spec:
    containers:
    - name: nginx
      image: godraude/nginx
      imagePullPolicy: Always
      ports:
      - containerPort: 80
      - containerPort: 443

这是kubectl describe pod <podname>的输出:

Events:
  FirstSeen LastSeen    Count   From            SubobjectPath       Type        Reason      Message
  --------- --------    -----   ----            -------------       --------    ------      -------
  1m        1m      1   {default-scheduler }                Normal      Scheduled   Successfully assigned web-deployment-2451628605-vtbl8 to minikube
  1m        23s     4   {kubelet minikube}  spec.containers{nginx}  Normal      Pulling     pulling image "godraude/nginx"
  1m        20s     4   {kubelet minikube}  spec.containers{nginx}  Warning     Failed      Failed to pull image "godraude/nginx": Error: image godraude/nginx not found
  1m        20s     4   {kubelet minikube}              Warning     FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "nginx" with ErrImagePull: "Error: image godraude/nginx not found"

  1m    4s  5   {kubelet minikube}  spec.containers{nginx}  Normal  BackOff     Back-off pulling image "godraude/nginx"
  1m    4s  5   {kubelet minikube}              Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "nginx" with ImagePullBackOff: "Back-off pulling image \"godraude/nginx\""

【问题讨论】:

    标签: kubernetes dockerhub minikube


    【解决方案1】:

    问题在于图像拉取策略。它被设置为Always,所以即使图像存在,docker 也试图拉取它。设置imagePullPolicy: Never 解决了这个问题。

    【讨论】:

      【解决方案2】:

      我认为你需要创建一个秘密,告诉 kube 它可以从哪里提取你的私有图像及其凭据

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

      下面的命令列出你的秘密

      kubectl get secret
      NAME            TYPE                      DATA      AGE
      my-secret   kubernetes.io/dockercfg   1         100d
      

      现在在部署定义中,您需要定义要使用的密码

      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        name: web-deployment
      spec:
        replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: godraude/nginx
            imagePullPolicy: Always
            ports:
            - containerPort: 80
            - containerPort: 443
          imagePullSecrets:
            - name: my-secret
      

      【讨论】:

        猜你喜欢
        • 2023-02-20
        • 2019-12-08
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        相关资源
        最近更新 更多