如何将本地 docker 镜像部署到 minikube?
How do I deploy a local docker image to minikube?
我的本地 docker 实例上有一些图像,其中一个名为 door_controls
:
>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
door_controls latest d22f58cdc9c1 3 hours ago 1.12GB
[...]
这个镜像也被部署到我的 minikube 实例:
>minikube ssh -- docker image ls
door_controls latest d22f58cdc9c1 3 hours ago 1.12GB
[...]
(我也很清楚这些是不同的 docker 守护进程,因为 minikube 上的那个也列出了 k8s 守护进程)。
文档(和 Whosebug 答案)表明
minikube image load door_controls
minikube kubectl run door-controls --image=door_controls --port=7777
是从命令行部署这个镜像的方法,但是事件日志告诉我在这个过程中有些失败:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 59s default-scheduler Successfully assigned default/door-controls to minikube
Normal Pulling 17s (x3 over 59s) kubelet Pulling image "door_controls"
Warning Failed 16s (x3 over 57s) kubelet Failed to pull image "door_controls": rpc error: code = Unknown desc = Error response from daemon: pull access denied for door_controls, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Warning Failed 16s (x3 over 57s) kubelet Error: ErrImagePull
Normal BackOff 1s (x3 over 57s) kubelet Back-off pulling image "door_controls"
Warning Failed 1s (x3 over 57s) kubelet Error: ImagePullBackOff
在调用命令的经典传统中我不明白希望它能解决问题,我听从了另一个答案的建议并尝试将 docker 守护进程设置为 minikube 的:
>eval $(minikube -p minikube docker-env)
//these aren't echoed by the shell of course
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://127.0.0.1:54664"
export DOCKER_CERT_PATH="/Users/airza/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"
似乎默认配置需要启用 TLS(从 localhost 到 localhost?)但我不确定如何关闭它或如何首先将有效的 TLS 从 localhost 添加到 localhost。
也不清楚这是否是问题所在,或者是否还有其他问题。我对图像的命名是错误的吗?我需要指定一个回购协议吗?为什么这个映像没有部署?
Minikube 有它自己的 docker 守护进程,默认情况下无法找到图像,下面在我的本地环境中工作,我注意到第一步已经完成,看起来图像仍在拉了,step-2可能会解决下面的问题
- 使用 eval $(minikube docker-env) 设置环境变量,我看到你已经设置好了。
- 将 ImagePullPolicy 设置为 Never 以便在部署中使用本地 docker 图像,这将确保图像不会从 docker 存储库中提取。
您可以在您的 use-case.运行 集群上尝试 运行 下面的 yaml。
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
image: door_controls
name: door_controls
imagePullPolicy: Never
ports:
- containerPort: 7777
我的本地 docker 实例上有一些图像,其中一个名为 door_controls
:
>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
door_controls latest d22f58cdc9c1 3 hours ago 1.12GB
[...]
这个镜像也被部署到我的 minikube 实例:
>minikube ssh -- docker image ls
door_controls latest d22f58cdc9c1 3 hours ago 1.12GB
[...]
(我也很清楚这些是不同的 docker 守护进程,因为 minikube 上的那个也列出了 k8s 守护进程)。
文档(和
minikube image load door_controls
minikube kubectl run door-controls --image=door_controls --port=7777
是从命令行部署这个镜像的方法,但是事件日志告诉我在这个过程中有些失败:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 59s default-scheduler Successfully assigned default/door-controls to minikube
Normal Pulling 17s (x3 over 59s) kubelet Pulling image "door_controls"
Warning Failed 16s (x3 over 57s) kubelet Failed to pull image "door_controls": rpc error: code = Unknown desc = Error response from daemon: pull access denied for door_controls, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Warning Failed 16s (x3 over 57s) kubelet Error: ErrImagePull
Normal BackOff 1s (x3 over 57s) kubelet Back-off pulling image "door_controls"
Warning Failed 1s (x3 over 57s) kubelet Error: ImagePullBackOff
在调用命令的经典传统中我不明白希望它能解决问题,我听从了另一个答案的建议并尝试将 docker 守护进程设置为 minikube 的:
>eval $(minikube -p minikube docker-env)
//these aren't echoed by the shell of course
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://127.0.0.1:54664"
export DOCKER_CERT_PATH="/Users/airza/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"
似乎默认配置需要启用 TLS(从 localhost 到 localhost?)但我不确定如何关闭它或如何首先将有效的 TLS 从 localhost 添加到 localhost。
也不清楚这是否是问题所在,或者是否还有其他问题。我对图像的命名是错误的吗?我需要指定一个回购协议吗?为什么这个映像没有部署?
Minikube 有它自己的 docker 守护进程,默认情况下无法找到图像,下面在我的本地环境中工作,我注意到第一步已经完成,看起来图像仍在拉了,step-2可能会解决下面的问题
- 使用 eval $(minikube docker-env) 设置环境变量,我看到你已经设置好了。
- 将 ImagePullPolicy 设置为 Never 以便在部署中使用本地 docker 图像,这将确保图像不会从 docker 存储库中提取。
您可以在您的 use-case.运行 集群上尝试 运行 下面的 yaml。
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
image: door_controls
name: door_controls
imagePullPolicy: Never
ports:
- containerPort: 7777