【问题标题】:how to pull locally built docker image on windows 10?如何在 Windows 10 上拉取本地构建的 docker 镜像?
【发布时间】:2020-02-24 12:48:41
【问题描述】:

我的操作系统是 windows 10 pro,我用 spring boot 开发。首先,我使用下面的 Dockerfile 构建 docker 映像。

FROM openjdk:11-jdk
ADD target/Spring-Blog-Jpa-0.0.1-SNAPSHOT.jar blog-app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Dfile.encoding=UTF8","-jar","blog-app.jar"]

使用 docker 命令成功构建 docker 镜像。

> docker image build -t blog-app:latest .

我从 docker 存储库中提取 mysql:latest 图像。而且mysql拉取也成功了。

> docker image pull mysql:latest .

我尝试使用这些 docker 镜像生成 kubernetes pod。在 mysql:latest image 的情况下,生成 mysql pod 时不会出错。但是在生成 blog-app pod 时,无法拉取 blog-app:latest 镜像并抛出错误消息。下面是配置yaml文件。

apiVersion: apps/v1
kind: Pod
metadata:
  name: blog-system
spec:
  containers:
  - name: blog-app
    image: blog-app:latest
    args: ["-t", "-i"]

不知道为什么本地构建的镜像在生成 pod 时无法拉取。有什么流程可以推送本地 docker 存储库吗?本地构建的 docker 镜像如何在 Kuberetes 上拉取?

【问题讨论】:

    标签: docker kubernetes minikube


    【解决方案1】:

    您可以重用 Minikube 中的 Docker 守护程序。以下是 Powershell 上的命令。

    PS C:\minikube> minikube docker-env

    PS C:\minikube> minikube docker-env |调用表达式

    docker image build -t blog-app:latest

    像构建标签一样在 pod spec 中设置镜像

    将 imagePullPolicy 设置为 Never,否则 Kubernetes 会尝试下载镜像。


    apiVersion: apps/v1
    kind: Pod
    metadata:
      name: blog-system
    spec:
      containers:
      - name: blog-app
        image: blog-app:latest
        imagePullPolicy: Never
        args: ["-t", "-i"]
    

    也可以查看guide

    【讨论】:

      【解决方案2】:

      这是 Docker 的一个令人困惑的方面。本质上,Kubernetes 正在尝试从容器注册表中拉取镜像,并且(通常)在将镜像推送到注册表之前,它无法被拉取。

      当您docker [push|pull] ... 时,您正在与(远程)容器注册表进行交互。默认情况下(如果您没有指定它),您正在与 DockerHub 交互,并且可能假设图像(除非另有标记)以 DockerHub 的 https://docker.io 为前缀。如果你使用,例如Google Container Registry,您会更频繁地使用它的主机前缀,例如https://gcr.io.

      当你在你的主机上构建一个容器时,直到你 docker push ... 镜像,它都不在注册表中。

      当您在 Kubernetes 规范|配置中引用映像时,Kubernetes 期望从注册表中提取映像。在您的情况下,blob-app 不在注册表中,因此失败。

      您可以运行本地注册表来解决此问题。您可以这样做的一种方法是根据@arghya-sadhu 的回答使用 Minikube。但您也可以运行 Docker 自己的 Registry 规范实现的 Docker 映像,请参阅registry

      或者您可以将图像推送到可公开访问的注册表,例如DockerHubGoogle Container RegistryQuay,然后像使用 mysql 一样从注册表中引用图像。 DockerHub 有一个非常常用的免费层,它允许公共和(数量有限的)私有存储库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        • 1970-01-01
        • 2019-11-26
        • 2021-11-13
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        相关资源
        最近更新 更多