【问题标题】:How to use local docker images with Minikube?如何在 Minikube 中使用本地 docker 镜像?
【发布时间】:2017-07-22 16:31:44
【问题描述】:

我有几个要与 minikube 一起使用的 docker 映像。我不想先上传然后下载相同的图像,而不是直接使用本地图像。我该怎么做?

我试过的东西:
1。我尝试运行这些命令(分别删除 minikube 的实例并重新开始)

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never

输出:

NAME                    READY     STATUS              RESTARTS   AGE
hdfs-2425930030-q0sdl   0/1       ContainerCreating   0          10m

它只是停留在某个状态,但从未达到就绪状态。


2.我尝试创建一个注册表,然后将图像放入其中,但这也不起作用。我可能做错了,但我找不到执行此任务的正确说明。

请提供在本地 Kubernetes 实例中使用本地 docker 镜像的说明。
操作系统:ubuntu 16.04
Docker : Docker 版本 1.13.1,构建 092cba3
Kubernetes:

Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:40:50Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"1970-01-01T00:00:00Z", GoVersion:"go1.7.1", Compiler:"gc", Platform:"linux/amd64"}

如果有人可以帮助我获得使用 docker-compose 来执行此操作的解决方案,那就太棒了。

编辑:

图片加载在eval $(minikube docker-env:

REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
fluxcapacitor/jupyterhub                              latest              e5175fb26522        4 weeks ago         9.59 GB
fluxcapacitor/zeppelin                                latest              fe4bc823e57d        4 weeks ago         4.12 GB
fluxcapacitor/prediction-pmml                         latest              cae5b2d9835b        4 weeks ago         973 MB
fluxcapacitor/scheduler-airflow                       latest              95adfd56f656        4 weeks ago         8.89 GB
fluxcapacitor/loadtest                                latest              6a777ab6167c        5 weeks ago         899 MB
fluxcapacitor/hdfs                                    latest              00fa0ed0064b        6 weeks ago         1.16 GB
fluxcapacitor/sql-mysql                               latest              804137671a8c        7 weeks ago         679 MB
fluxcapacitor/metastore-1.2.1                         latest              ea7ce8c5048f        7 weeks ago         1.35 GB
fluxcapacitor/cassandra                               latest              3cb5ff117283        7 weeks ago         953 MB
fluxcapacitor/apachespark-worker-2.0.1                latest              14ee3e4e337c        7 weeks ago         3.74 GB
fluxcapacitor/apachespark-master-2.0.1                latest              fe60b42d54e5        7 weeks ago         3.72 GB
fluxcapacitor/package-java-openjdk-1.8                latest              1db08965289d        7 weeks ago         841 MB
gcr.io/google_containers/kubernetes-dashboard-amd64   v1.5.1              1180413103fd        7 weeks ago         104 MB
fluxcapacitor/stream-kafka-0.10                       latest              f67750239f4d        2 months ago        1.14 GB
fluxcapacitor/pipeline                                latest              f6afd6c5745b        2 months ago        11.2 GB
gcr.io/google-containers/kube-addon-manager           v6.1                59e1315aa5ff        3 months ago        59.4 MB
gcr.io/google_containers/kubedns-amd64                1.9                 26cf1ed9b144        3 months ago        47 MB
gcr.io/google_containers/kube-dnsmasq-amd64           1.4                 3ec65756a89b        5 months ago        5.13 MB
gcr.io/google_containers/exechealthz-amd64            1.2                 93a43bfb39bf        5 months ago        8.37 MB
gcr.io/google_containers/pause-amd64           

【问题讨论】:

    标签: linux docker kubernetes docker-compose


    【解决方案1】:

    正如README 所述,您可以使用eval $(minikube docker-env) 重用Minikube 中的Docker 守护程序。

    所以要在不上传图片的情况下使用图片,您可以按照以下步骤操作:

    1. eval $(minikube docker-env)设置环境变量
    2. 使用 Minikube 的 Docker 守护进程构建镜像(例如 docker build -t my-image .
    3. 像构建标签一样在 pod 规范中设置图像(例如 my-image
    4. imagePullPolicy设置为Never,否则Kubernetes会尝试下载镜像。

    重要提示:您必须在要使用的每个终端上运行eval $(minikube docker-env),因为它只设置当前shell会话的环境变量。

    【讨论】:

    • 非常重要的是要记住在关闭您正在使用的终端后运行eval $(minikube docker-env),然后再尝试重建图像......刚刚与未在 minikube 中更新的图像进行了 6 小时的战斗。 .. 看起来一个包没有更新...实际上只是没有更新 minikube 引用的图像。
    • 如果你想从 minikube 返回或退出 env .. eval $(minikube docker-env -u)
    • 如何使用kubectl“将imagePullPolicy 设置为Never”?
    • 现在,您还可以使用minikube cache add imagename:tag 将图像推送到 minikube - 请务必包含标签。 Docs
    • "minikube cache" will be deprecated in upcoming versions, please switch to "minikube image load" - 刚从我的终端得到它。
    【解决方案2】:

    什么对我有用,基于@svenwltr 的解决方案:

    # Start minikube
    minikube start
    
    # Set docker env
    eval $(minikube docker-env)             # unix shells
    minikube docker-env | Invoke-Expression # PowerShell
    
    # Build image
    docker build -t foo:0.0.1 .
    
    # Run in minikube
    kubectl run hello-foo --image=foo:0.0.1 --image-pull-policy=Never
    
    # Check that it's running
    kubectl get pods
    

    【讨论】:

    • 您可以在此处找到上述命令行的 yml 版本(关于 imagePullPolicy):kubernetes.io/docs/concepts/containers/images
    • 在 Windows 上 eval $(minikube docker-env) 对我不起作用。 minikube docker-env | Invoke-Expression 似乎在 PowerShell 中工作。在其他终端中,需要读取 minikube docker-env 返回的最后一行。例如,在 IntelliJ(在 Windows 上)它是 @FOR /f "tokens=*" %i IN ('minikube -p minikube docker-env') DO @%i 你必须在任何新的终端/会话中总是这样做在构建 docker 映像之前。
    • 在执行 eval $(minikube docker-env) 时出现以下错误。 “'none'驱动不支持'minikube docker-env'命令”它似乎也在github上登录。 github.com/kubernetes/minikube/issues/2443
    【解决方案3】:

    注意事项:

    • 此答案不限于 minikube!

    • 如果想在 minikube 的 Docker 上创建注册表,请先运行 eval $(minikube docker-env)(使 docker 在主机终端上可用)。
      否则通过minikube ssh进入虚拟机,然后继续下面的步骤

    • 根据您的操作系统,minikube will automatically mount your homepath 到 VM 上。

    • 正如 Eli 所说,您需要将本地注册表添加为不安全才能使用 http(使用 localhost 时可能不适用,但如果使用本地主机名则适用)
      不要在生产环境中使用 http,努力确保安全。


    使用本地注册表:

    docker run -d -p 5000:5000 --restart=always --name local-registry registry:2
    

    现在正确标记您的图像:

    docker tag ubuntu localhost:5000/ubuntu
    

    请注意,localhost 应更改为运行注册表容器的机器的 dns 名称。

    现在将您的图像推送到本地注册表:

    docker push localhost:5000/ubuntu
    

    你应该可以把它拉回来:

    docker pull localhost:5000/ubuntu
    

    现在更改您的 yaml 文件以使用本地注册表。

    考虑在适当的位置安装卷,以将图像持久保存在注册表中。

    【讨论】:

    • |现在更改您的 yaml 文件以使用本地注册表。你能解释一下吗?我推送到本地注册表(很酷的技巧),但我有同样的问题,我无法让 minikube 连接到它。
    • @ZachEstela 将 yaml 中的图片名称更改为 <registryIP>:5000/ubuntu
    • @FarhadFarahi 如果我把笔记本电脑给你,你怎么知道?我只是想知道它。我按照 docker 教程步骤让 docker for windows 运行。
    • @FarhadFarahi:请添加到您的答案中,您需要将本地注册表添加为不安全才能使用 http:docs.docker.com/registry/insecure(使用 localhost 时可能不适用,但如果使用本地主机名)。
    • Failed to pull image "localhost:5000/src_interface:latest" 根据我的 minikube 仪表板,这似乎不起作用。 kubectl 如何访问 5000 端口?
    【解决方案4】:

    有一种有效的方法可以将本地 Docker 镜像直接推送到 minikube,这样可以节省再次在 minikube 中构建镜像的时间。

    minikube image load <image name>
    

    minikube cache add &lt;image name&gt; - 不推荐使用的旧方式,供参考)

    更多详情here

    这里提到了将图像推送到 minikube 的所有可能方法:https://minikube.sigs.k8s.io/docs/handbook/pushing/

    【讨论】:

    • 这个答案应该在列表中更高,它是更新的解决方案。
    • 这也已被弃用,取而代之的是minikube image load &lt;image name&gt;
    • 这就是为我解决问题的方法,是的应该更高
    • 很高兴我向下滚动到这个答案,因为它超级简单,谢谢!
    • 欢迎@hocikto
    【解决方案5】:

    添加到基于this answer 的@Farhad 的答案,

    这是设置本地注册表的步骤。

    在本地机器上设置

    在本地机器中设置主机名:编辑 /etc/hosts 以添加此行

    docker.local 127.0.0.1
    

    现在启动一个本地注册表(删除 -d 以运行非守护程序模式):

    docker run -d -p 5000:5000 --restart=always --name registry registry:2
    

    现在正确标记您的图像:

    docker tag ubuntu docker.local:5000/ubuntu
    

    现在将您的图像推送到本地注册表:

    docker push docker.local:5000/ubuntu
    

    验证图片是否被推送:

    curl -X GET http://docker.local:5000/v2/ubuntu/tags/list
    

    在 minikube 中设置

    通过 SSH 进入 minikube:minukube ssh

    编辑/etc/hosts 以添加此行

    docker.local <your host machine's ip>
    

    验证访问权限:

    curl -X GET http://docker.local:5000/v2/ubuntu/tags/list
    

    现在如果你尝试拉取,你可能会得到一个 http 访问错误。

    启用不安全的访问

    如果您一直计划在此本地设置中使用 minkube,则创建一个 minikube 以默认使用不安全的注册表(不适用于现有集群)。

    minikube start --insecure-registry="docker.local:5000"
    

    其他步骤如下:

    systemctl stop docker
    

    编辑 docker 服务文件:get path from systemctl status docker

    可能是:

    /etc/systemd/system/docker.service.d/10-machine.conf 或 /usr/lib/systemd/system/docker.service

    附加此文本(将 192.168.1.4 替换为您的 ip)

    --insecure-registry docker.local:5000 --insecure-registry 192.168.1.4:5000

    到这一行

    ExecStart=/usr/bin/docker 守护进程 -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=virtualbox --insecure-registry 10.0.0.0/24

    systemctl daemon-reload
    systemctl start docker
    

    尝试拉动:

    docker pull docker.local:5000/ubuntu
    

    现在更改您的 yaml 文件以使用本地注册表。

      containers:
        - name: ampl-django
          image: dockerhub/ubuntu
    

      containers:
        - name: ampl-django
          image: docker.local:5000/nymbleup
    

    不要在生产环境中使用 http,努力确保安全。

    【讨论】:

      【解决方案6】:

      一种方法是在本地构建映像,然后执行:

      docker save imageNameGoesHere | pv | (eval $(minikube docker-env) && docker load)
      

      minikube docker-env 可能不会返回在不同用户/sudo 下运行的正确信息。相反,您可以运行 sudo -u yourUsername minikube docker-env

      它应该返回类似:

      export DOCKER_TLS_VERIFY="1"
      export DOCKER_HOST="tcp://192.168.99.100:2376"
      export DOCKER_CERT_PATH="/home/chris/.minikube/certs"
      export DOCKER_API_VERSION="1.23"
      # Run this command to configure your shell:
      # eval $(minikube docker-env)
      

      【讨论】:

      • 正确的命令是docker save imageNameGoesHere &gt; pv | (eval $(minikube docker-env) &amp;&amp; docker load)
      • docker save imageNameGoesHere | (eval $(minikube docker-env) &amp;&amp; docker load) 为我工作
      【解决方案7】:

      关于“minikube”要记住的一点是,minikube 的主机与您的本地主机不同,因此,我意识到,为了使用本地映像对 minikube 进行测试,您必须先在本地构建您的 docker 映像,或者将其拉到本地,然后使用下面的命令将其添加到 minikube 上下文中,即作为另一个 linux 实例。

       minikube cache add <image>:<tag>
      

      但是,不要忘记在您的 kubernetes 部署 yamls 中设置 imagePullPolicy: Never,因为这将确保使用本地添加的图像,而不是尝试从注册表远程拉取它。

      更新minikube cache 将在即将发布的版本中弃用,请切换到minikube image load

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      【解决方案8】:

      除了接受的答案之外,您还可以使用以下命令实现您最初想要的(使用run 命令创建部署):

      kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1 
      

      我在 Kubernetes-dev 论坛上找到了有关生成器的信息:

      如果您使用的是kubectl run,它会为您生成一个清单,其中imagePullPolicy 默认设置为Always。您可以使用此命令获取IfNotPresentimagePullPolicy,这将适用于minikube

      kubectl run --image=&lt;container&gt; --generator=run-pod/v1

      丹·洛伦克

      https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM

      【讨论】:

        【解决方案9】:

        较新版本的 minikube 允许您通过运行从本地 docker 实例加载映像

         minikube image rm image <imagename>:<version>  
         minikube image load <imagename>:<version> --daemon
        

        加载命令可能会显示错误,但图像仍会加载到您的 minikube 实例中

        【讨论】:

          【解决方案10】:

          如果有人在设置 minikube 环境后希望回到本地环境,请使用以下命令。

          eval $(docker-machine env -u)
          

          【讨论】:

          【解决方案11】:

          回答原始问题“如何在 Minikube 中使用本地 docker 图像?”的更简单方法是将图像保存到 tar 文件并将其加载到 minikube:

          # export the docker image to a tar file
          docker save --output my-image.tar the.full.path.to/the/docker/image:the-tag
          # set local environment variables so that docker commands go to the docker in minikube
          eval $(minikube docker-env)
          # or if on windows: @FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
          # import the docker image from the tar file into minikube
          docker load --input my-image.tar
          # cleanup - put docker back to normal
          eval $(minikube docker-env -u)
          # or if on windows: @FOR /f "tokens=*" %i IN ('minikube docker-env -u') DO @%i
          

          然后运行映像涉及如下命令。确保包含“--image-pull-policy=Never”参数。

          kubectl run my-image --image=the.full.path.to/the/docker/image:the-tag --image-pull-policy=Never --port=80
          

          【讨论】:

          • 很好解释,就像一个魅力。我只需要使用sudo 调用docker save,然后设置sudo chmod 664 my-image.tar 以使其可供当前用户使用。
          【解决方案12】:

          来自 kubernetes 文档:

          https://kubernetes.io/docs/concepts/containers/images/#updating-images

          默认的拉取策略是 IfNotPresent,这会导致 Kubelet 跳过拉取已经存在的镜像。如果您想始终强制拉动,可以执行以下操作之一:

          • 将容器的imagePullPolicy设置为Always;
          • 使用 :latest 作为要使用的图像的标签;
          • 启用 AlwaysPullImages 准入控制器。

          或者换一种方式阅读:使用 :latest 标签强制图像总是被拉出。如果你使用上面提到的eval $(minikube docker-env),那么要么不使用任何标签,要么给你的本地镜像分配一个标签,你可以避免Kubernetes试图强行拉取它。

          【讨论】:

            【解决方案13】:

            现在有一个 Minikube Registry 插件,这可能是最简单的方法。使用方法如下:https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/

            请注意,我遇到了 DNS 问题,可能是一个错误。

            【讨论】:

              【解决方案14】:

              一个想法是在本地保存 docker 镜像,然后将其加载到 minikube 中,如下所示:

              比如说,你已经有了 puckel/docker-airflow 镜像。

              1. 将该图像保存到本地磁盘 -

                docker save puckel/docker-airflow &gt; puckel_docker_airflow.tar

              2. 现在进入 minikube docker env -

                eval $(minikube docker-env)

              3. 加载本地保存的图像 -

                docker load &lt; puckel_docker_airflow.tar

              就这么简单,而且效果很好。

              【讨论】:

              • 您仍然需要Set the imagePullPolicy to Never 的已接受答案提示。如果您的图像标有地址,例如us.icr.io/mydiv/my-service:v0.0.1 然后部署将尝试远程拉取此图像。由于您已经手动复制了镜像,因此您需要禁止 k8s 从它无法访问的地址(容器注册表)中拉取镜像。
              • @colm.anseo 上述步骤对我有用,但我必须将图像中的latest 标记替换为特定版本,并在 create deploy 命令中选择此版本。 imagePullPolicy 自动设置为 IfNotPresent,并且图像已正确加载,无需进一步更改。
              【解决方案15】:
              minikube addons enable registry -p minikube
              

              ? docker 上的注册表插件使用 32769 请改用它 默认为 5000
              ?欲了解更多信息,请参阅: https://minikube.sigs.k8s.io/docs/drivers/docker

              docker tag ubuntu $(minikube ip -p minikube):32769/ubuntu
              docker push $(minikube ip -p minikube):32769/ubuntu
              

              minikube addons enable registry
              docker tag ubuntu $(minikube ip):32769/ubuntu
              docker push $(minikube ip):32769/ubuntu
              

              以上对于开发目的来说已经足够了。我在archlinux上做这个。

              【讨论】:

              • 你如何引用 k8s 规范中的图像?通过localhost:32769/ubuntu 或使用 minikube ip 或注册表 dns 名称?
              【解决方案16】:

              添加到前面的答案,如果你有一个 tarball 图像,你可以简单地将它加载到你的本地 docker 图像集 docker image load -i /path/image.tar 。请记住运行它之后 eval $(minikube docker-env),因为 minikube 不与本地安装的 docker 引擎共享图像。

              【讨论】:

                【解决方案17】:

                其他答案假设您将 minikube 与 VM 一起使用,因此您的本地映像无法从 minikube VM 访问。

                如果您将 minikube 与 --vm-driver=none 一起使用,您可以通过将 image_pull_policy 设置为 Never 轻松重用本地图像:

                kubectl run hello-foo --image=foo --image-pull-policy=Never
                

                或在相应的.yaml 清单中为容器设置imagePullPolicy 字段。

                【讨论】:

                  【解决方案18】:

                  对于 Docker 上的 minikube:

                  选项 1:使用 minikube 注册表

                  1. 检查您的 minikube 端口 docker ps

                  你会看到类似:127.0.0.1:32769-&gt;5000/tcp 这意味着您的 minikube 注册表在 32769 端口上供外部使用,但在内部它在 5000 端口上。

                  1. 构建你的 docker 镜像并标记它: docker build -t 127.0.0.1:32769/hello .

                  2. 将镜像推送到 minikube 注册表: docker push 127.0.0.1:32769/hello

                  3. 检查它是否存在: curl http://localhost:32769/v2/_catalog

                  4. 使用内部端口构建一些部署: kubectl create deployment hello --image=127.0.0.1:5000/hello

                  您的图像现在在 minikube 容器中,可以看到它写入:

                  eval $(minikube -p <PROFILE> docker-env)
                  docker images
                  

                  警告:如果只使用一个名为“minikube”的配置文件,那么“-p”部分是多余的,但如果使用更多,请不要忘记它;我个人删除标准的(minikube),以免出错。

                  选项 2:不使用注册表

                  1. 切换到 minikube 容器 Docker: eval $(minikube -p &lt;PROFILE&gt; docker-env)
                  2. 构建您的图像: docker build -t hello .
                  3. 创建一些部署: kubectl create deployment hello --image=hello

                  最后将部署 ImagePullPolicy 从 Always 更改为 IfNotPresent:

                  kubectl edit deployment hello

                  【讨论】:

                    【解决方案19】:

                    如果你可以在 docker 的 vm 中运行 k8s 会怎样?最新版本的 docker desktop 对此提供了本机支持...您只需要启用该支持即可。

                    https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now-kubernetes/

                    我是怎么发现的:

                    在阅读 helm 文档时,它们会为您提供如何安装 minikube 的简短教程。 该教程将 minikube 安装在与 docker 不同/独立的 vm 中。

                    所以当安装我的 helm 图表时,我无法让 helm/k8s 拉取我使用 docker 构建的图像。我就是这样来回答这个问题的。

                    所以...如果您可以使用 docker 桌面附带的任何版本的 k8s,并且可以在任何 vm docker 中运行它,那么也许这个解决方案比其他一些解决方案更容易一些。

                    免责声明:不确定在 windows/linux 容器之间切换会如何影响任何事情。

                    【讨论】:

                    • 我想我还必须将 imagePullPolicies 设置为 IfNotPresent
                    【解决方案20】:
                    1. 设置 minikube docker-env
                    2. 再次构建相同的 docker 镜像(使用 minikube docker-env)
                    3. 在您的部署中将 imagePullPolicy 更改为 从不

                    实际上这里发生了什么,你的 Minikube 无法识别你的 docker 守护进程,因为它是独立的服务。你必须首先设置你的 minikube-docker 环境使用下面的命令来检查

                     "eval $(minikube docker-env)"
                    

                    如果你运行下面的命令,它会显示你的 minikube 在哪里寻找 docker。

                    ~$ minikube docker-env
                    export DOCKER_TLS_VERIFY="1"
                    export DOCKER_HOST="tcp://192.168.37.192:2376"
                    export DOCKER_CERT_PATH="/home/ubuntu/.minikube/certs"
                    export MINIKUBE_ACTIVE_DOCKERD="minikube"
                    
                    **# To point your shell to minikube's docker-daemon, run:**
                    # eval $(minikube -p minikube docker-env)
                    

                    一旦你设置了 minikube docker-env,你必须再次构建镜像,否则它会失败。

                    【讨论】:

                      【解决方案21】:

                      在 kubernetes 中运行本地 docker 镜像的步骤
                      1. 评估 $(minikube -p minikube docker-env)
                      2. 在工件文件中,在规范部分 -> 容器
                      添加 imagePullPolicy: IfNotPresent
                      或 imagePullPolicy: 从不

                      apiVersion: "v1"
                      kind: Pod
                      metadata:
                          name: web
                          labels:
                              name: web
                              app: demo
                      spec:
                          containers:
                              - name: web
                                image: web:latest
                                imagePullPolicy: IfNotPresent
                                ports:
                                    - containerPort: 5000
                                      name: http
                                      protocol: TCP
                      


                      3.然后运行kubectl create -f &lt;filename&gt;

                      【讨论】:

                        【解决方案22】:

                        在之前的答案的基础上使用eval $(minikube docker-env) 来加载 minikube 的 docker 环境,为了更轻松地切换,将以下函数添加到您的 shell rc 文件中:

                        dockube() {
                          if [[ $1 = 'which' ]]; then
                            if [[ $MINIKUBE_ACTIVE_DOCKERD = 'minikube' ]]; then
                              echo $MINIKUBE_ACTIVE_DOCKERD
                            else
                              echo 'system'
                            fi
                            return
                          fi
                        
                          if [[ $MINIKUBE_ACTIVE_DOCKERD = 'minikube' ]]; then
                            eval $(minikube docker-env -u)
                            echo "now using system docker"
                          else
                            eval $(minikube -p minikube docker-env)
                            echo "now using minikube docker"
                          fi
                        }
                        

                        dockube 不带参数将在系统和 minikube docker 环境之间切换,dockube which 将返回哪个正在使用。

                        【讨论】:

                          【解决方案23】:

                          您可以使用 eval $(minikube docker-env) 重复使用 docker shell,或者,您可以在整个 shell 中利用 docker save | docker load

                          【讨论】:

                            【解决方案24】:

                            在 minikube 1.20 上,minikube cache add imagename:tag 已弃用。

                            改为使用minikube image load imagename:tag

                            【讨论】:

                              【解决方案25】:

                              除了 minikube image load &lt;image name&gt;,请查看 Minikube 的最新版本(撰写本文时为 2021 年 11 月)。

                              v1.24.0

                              添加 --no-kubernetes 标志以在没有 Kubernetes 的情况下启动 minikube
                              PR 12848,对于

                              这给了你:

                              mk start --no-kubernetes
                              minikube v1.24.0-beta.0 on Darwin 11.6 (arm64)
                              Automatically selected the docker driver
                              Starting minikube without Kubernetes minikube in cluster minikube
                              Pulling base image ...
                              Creating docker container (CPUs=2, Memory=1988MB) ...
                              Done! minikube is ready without Kubernetes!
                              

                              没有 Kubernetes 的尝试

                              • minikube ssh”通过 SSH 连接到 minikube 的节点。
                              • minikube docker-env”通过指向minikube里面的docker来构建镜像
                              • minikube image”不用docker构建镜像

                              【讨论】:

                                【解决方案26】:

                                我从ClickHouse Operator Build From Sources 找到这个方法 它帮助并挽救了我的生命!

                                docker save altinity/clickhouse-operator | (eval $(minikube docker-env) && 
                                docker load)
                                

                                【讨论】:

                                  猜你喜欢
                                  • 2020-01-06
                                  • 2021-12-27
                                  • 2019-03-10
                                  • 1970-01-01
                                  • 2019-12-05
                                  • 2019-08-13
                                  • 1970-01-01
                                  • 2020-08-03
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多