【问题标题】:Kubernetes cannot pull an image from private repository on Docker HubKubernetes 无法从 Docker Hub 上的私有存储库中提取映像
【发布时间】:2020-12-09 21:20:08
【问题描述】:

由于某种原因,Kubernetes 无法从我在 Docker Hub 上的私人帐户中提取图像。我尝试了所有可能的方法来创建一个秘密(从 config.json,通过直接在命令行上提供凭据),但仍然没有成功。

上次我做了docker login 并执行了以下命令来创建秘密:

kubectl create secret docker-registry dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json

还尝试了以下命令(相同但我认为kubectl 中可能存在无法正确识别参数的错误:

kubectl create secret generic dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json --type=kubernetes.io/dockerconfigjson

部署后,我可以在 pod 的 YAML 文件中看到以下内容:

spec:
  volumes:
    ...
  containers:
    - name: container-name
      image: 'username/projects:web_api_123'
      ports:
        - containerPort: 80
          protocol: TCP
      ...
      imagePullPolicy: IfNotPresent
  ...
  imagePullSecrets:
    - name: dockerhub-credentials

映像名称正确(我已验证)并且带有 Docker Hub 凭据的密钥已正确分配给我的 POD。 我什至修补了默认服务帐户!但是还是不行。

【问题讨论】:

  • 你在使用 Azure 吗?
  • 不,这是私有 Kubernetes 集群。我可以使用 telnet 连接到端口 443 上的 index.docker.io。

标签: docker kubernetes kubernetes-pod


【解决方案1】:

好的,问题在于命名空间:我所有的部署、Pod、服务等都存在于一个单独的命名空间中,但是创建秘密的命令在“默认”命名空间中。

出于某种原因,我认为“默认”命名空间中的这些秘密在另一个命名空间中是可见的,但事实并非如此。所以,如果你想创建一个 docker config secret,你必须使用 YAML:

kind: Secret
apiVersion: v1
metadata:
  name: dockerhub-credentials
  namespace: your-namespace
data:
  .dockerconfigjson: base64-encoded-/.docker/config.json
type: kubernetes.io/dockerconfigjson

【讨论】:

猜你喜欢
  • 2021-01-05
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2015-09-03
相关资源
最近更新 更多