docker - Kubernetes imagePullSecrets 不工作;得到 "image not found"

标签 docker kubernetes dockerhub

我有一个在 AWS 上运行的现成 Kubernetes 集群,安装了 kube-up 脚本。我想运行一些位于私有(private) Docker Hub 存储库中的容器。但我不断收到“未找到”错误:

 > kubectl get pod
NAME                      READY     STATUS                                        RESTARTS   AGE
maestro-kubetest-d37hr    0/1       Error: image csats/maestro:latest not found   0          22m

我创建了一个包含 .dockercfg 文件的 secret 。我已经通过运行发布的脚本确认它可以工作 here :

 > kubectl get secrets docker-hub-csatsinternal -o yaml | grep dockercfg: | cut -f 2 -d : | base64 -D > ~/.dockercfg
 > docker pull csats/maestro
latest: Pulling from csats/maestro

我已经确认我没有使用 the new format of .dockercfg script ,我的看起来像这样:

> cat ~/.dockercfg
{"https://index.docker.io/v1/":{"auth":"REDACTED BASE64 STRING HERE","email":"eng@csats.com"}}

我试过 running the Base64 encode on Debian instead of OS X ,那里没有运气。 (正如预期的那样,它会产生相同的字符串。)

这是我的复制 Controller 的 YAML:

---
kind: "ReplicationController"
apiVersion: "v1"
metadata:
  name: "maestro-kubetest"
spec:
  replicas: 1
  selector:
    app: "maestro"
    ecosystem: "kubetest"
    version: "1"
  template:
    metadata:
      labels:
        app: "maestro"
        ecosystem: "kubetest"
        version: "1"
    spec:
      imagePullSecrets:
        - name: "docker-hub-csatsinternal"
      containers:
        - name: "maestro"
          image: "csats/maestro"
          imagePullPolicy: "Always"

      restartPolicy: "Always"
      dnsPolicy: "ClusterFirst"

kubectl 版本:

Client Version: version.Info{Major:"1", Minor:"0", GitVersion:"v1.0.3", GitCommit:"61c6ac5f350253a4dc002aee97b7db7ff01ee4ca", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"0", GitVersion:"v1.0.3", GitCommit:"61c6ac5f350253a4dc002aee97b7db7ff01ee4ca", GitTreeState:"clean"}

有什么想法吗?

最佳答案

您可能会看到“找不到图像”的另一个可能原因是您的 key 的命名空间与容器的命名空间不匹配。

例如,如果您的部署 yaml 看起来像

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mydeployment
  namespace: kube-system

那么你必须确保 Secret yaml 使用匹配的命名空间:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  namespace: kube-system
data:
  .dockerconfigjson: ****
type: kubernetes.io/dockerconfigjson

如果您没有为您的 key 指定命名空间,它将最终在默认命名空间中并且不会被使用。没有警告信息。我刚刚在这个问题上花了几个小时,所以我想我会在这里分享它,希望我可以节省其他人的时间。

关于docker - Kubernetes imagePullSecrets 不工作;得到 "image not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510310/

相关文章:

docker - CURL在Docker镜像中不起作用[无法访问Docker镜像中的主机]

docker - 错误:服务 'mysql'无法建立: list list 项目中没有linux/arm/v7的相符 list

rest - 如何使用 Docker Registry HTTP API V2 获取 docker 注册表中所有存储库的列表?

docker - Docker镜像层: `ADD file:<some_hash> in/`是什么意思?

mysql - docker cp 不适用于这个 mysql 容器

docker - .NET Core 2.2 Docker Core转储故障排除

node.js - 如何在 kubernetes 上部署带有 redis 的 node.js?

azure - 如何为 Azure 上的 Kubernetes 集群中运行的 Grafana 安装自定义插件

ssl - 在 gke 上设置没有 helm 或 rbac 的证书管理器时遇到问题

docker - 您如何将从 docker hub 中提取的图像缓存到私有(private) docker 注册表中?