【问题标题】:How can I use a local docker image in Kubernetes?如何在 Kubernetes 中使用本地 docker 镜像?
【发布时间】:2018-06-03 22:33:14
【问题描述】:

我有这个基本的 Dockerfile:

FROM nginx
RUN apt-get -y update && apt install -y curl

在我的 Kubernetes 集群的主节点中,我构建了该映像:

docker build -t cnginx:v1 . 

docker images表示图片已经正确生成:

REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
cgninx                                     v1                  d3b1b19d069e        39 minutes ago      141MB

我使用这个部署引用这个自定义图像:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: cnginx
        image: cnginx:v1
        imagePullPolicy: Never
        ports:
        - containerPort: 80
      nodeSelector:
        nodetype: webserver

但是找不到图片:

NAME                                READY     STATUS              RESTARTS   AGE
nginx-deployment-7dd98bd746-lw6tp   0/1       ErrImageNeverPull   0          4s
nginx-deployment-7dd98bd746-szr9n   0/1       ErrImageNeverPull   0          4s

描述 pod 信息:

Events:
  Type     Reason                 Age              From                Message
  ----     ------                 ----             ----                -------
  Normal   Scheduled              1m               default-scheduler   Successfully assigned nginx-deployment-7dd98bd746-szr9n to kubenode2
  Normal   SuccessfulMountVolume  1m               kubelet, kubenode2  MountVolume.SetUp succeeded for volume "default-token-bpbpl"
  Warning  ErrImageNeverPull      9s (x9 over 1m)  kubelet, kubenode2  Container image "cnginx:v1" is not present with pull policy of Never
  Warning  Failed                 9s (x9 over 1m)  kubelet, kubenode2  Error: ErrImageNeverPull

我也尝试过使用默认的 imagePullPolicy,以及一些其他的东西,比如用最新的标记图像......

那么,如何让 Kubernetes 使用本地生成的 docker 镜像?

【问题讨论】:

  • 您在一个节点上构建并试图在另一个节点上运行它?还是这一切都在同一个节点上?
  • 集群由三个节点组成,一个master,两个worker。我正在主节点上构建映像。
  • 对,正如公认的那样,这就是问题所在:p 你在一个地方构建并试图在其他地方运行它(它不存在的地方)。
  • 是的,呵呵,我的错 :-)

标签: docker kubernetes


【解决方案1】:

您的 POD 安排在您的工作程序节点上。由于您将imagePullPolicy 设置为Never,因此您需要使您的图像对两个节点都可用。换句话说,您需要像在主节点上一样在两个节点上构建它。

作为旁注,从长远来看,如果您设置自定义 docker 注册表并将图像推送到那里,可能会更容易。

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 2021-12-27
    • 2019-08-13
    • 2017-07-22
    • 2018-11-17
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多