kubernetes 使用minikube的本地docker镜像

agxfikkp  于 2023-04-11  发布在  Kubernetes
关注(0)|答案(5)|浏览(248)

我跟踪了这个URL:How to use local docker images with Minikube?我无法添加评论,所以想到把我的问题放在这里:
在我的笔记本电脑上,我有Linux Mint操作系统。详细信息如下:

Mint version 19, 
Code name : Tara,
PackageBase : Ubuntu Bionic
Cinnamon (64-bit)

根据上述链接上的答案:
1.我启动了minikube并检查了pod和部署

xxxxxxxxx:~$ pwd
/home/sj

xxxxxxxxxx:~$ minikube start
xxxxxxxxxx:~$ kubectl get pods
xxxxxxxxxx:~$ kubectl get deployments

我运行了命令docker镜像

xxxxxxxxx:~$ docker images

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
<username>/spring-docker-01   latest              e10f88e1308d        6 days ago          640MB
openjdk                           8                   81f83aac57d6        4 weeks ago         624MB
mysql                             5.7                 563a026a1511        4 weeks ago         372MB

1.我在下面运行命令:
eval $(minikube docker-env)
1.现在,当我检查docker镜像时,看起来像README描述的那样,它通过eval $(minikube docker-env)重用Minikube的Docker守护进程。
xxxxxxxxxxxxx:~$ docker images

REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
nginx                                      alpine              33c5c6e11024        9 days ago          17.7MB
k8s.gcr.io/coredns                         1.2.2               367cdc8433a4        5 weeks ago         39.2MB
k8s.gcr.io/kubernetes-dashboard-amd64      v1.10.0             0dab2435c100        5 weeks ago         122MB
k8s.gcr.io/kube-proxy-amd64                v1.10.0             bfc21aadc7d3        6 months ago        97MB
k8s.gcr.io/kube-controller-manager-amd64   v1.10.0             ad86dbed1555        6 months ago        148MB
k8s.gcr.io/kube-apiserver-amd64            v1.10.0             af20925d51a3        6 months ago        225MB
k8s.gcr.io/kube-scheduler-amd64            v1.10.0             704ba848e69a        6 months ago        50.4MB
k8s.gcr.io/etcd-amd64                      3.1.12              52920ad46f5b        6 months ago        193MB
k8s.gcr.io/kube-addon-manager              v8.6                9c16409588eb        7 months ago        78.4MB
k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64     1.14.8              c2ce1ffb51ed        9 months ago        41MB
k8s.gcr.io/k8s-dns-sidecar-amd64           1.14.8              6f7f2dc7fab5        9 months ago        42.2MB
k8s.gcr.io/k8s-dns-kube-dns-amd64          1.14.8              80cc5ea4b547        9 months ago        50.5MB
k8s.gcr.io/pause-amd64                     3.1                 da86e6ba6ca1        9 months ago        742kB
gcr.io/k8s-minikube/storage-provisioner    v1.8.1              4689081edb10        11 months ago       80.8MB
k8s.gcr.io/echoserver                      1.4                 a90209bb39e3        2 years ago         140MB
  • 注意:如果注意到docker images命令在步骤2之前和之后拉取了不同的图像。*

1.由于我没有看到我想放在minikube上的图像,我从我的docker hub中取出了它。

xxxxxxxxxxxxx:~$ docker pull <username>/spring-docker-01
Using default tag: latest
latest: Pulling from <username>/spring-docker-01
05d1a5232b46: Pull complete 
5cee356eda6b: Pull complete 
89d3385f0fd3: Pull complete 
80ae6b477848: Pull complete 
40624ba8b77e: Pull complete 
8081dc39373d: Pull complete 
8a4b3841871b: Pull complete 
b919b8fd1620: Pull complete 
2760538fe600: Pull complete 
48e4bd518143: Pull complete 
Digest: sha256:277e8f7cfffdfe782df86eb0cd0663823efc3f17bb5d4c164a149e6a59865e11
Status: Downloaded newer image for <username>/spring-docker-01:latest

1.已验证是否可以使用“docker images”命令看到该图像。

xxxxxxxxxxxxx:~$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
<username>/spring-docker-01            latest              e10f88e1308d        6 days ago          640MB
nginx                                      alpine              33c5c6e11024        10 days ago         17.7MB

1.然后我试着按照参考链接步骤中的说明构建图像。

xxxxxxxxxx:~$ docker build -t <username>/spring-docker-01 .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/sj/Dockerfile: no such file or directory

由于错误指出dockerfile在该位置不存在,我不确定在哪里可以看到我从docker hub中提取的图像的dockerfile。

看起来我必须去的位置,图像已被拉,并从该位置,我需要运行上述命令。请纠正我的错误。
下面是我解决上述问题后的步骤。

# Run in minikube
kubectl run hello-foo --image=myImage --image-pull-policy=Never

# Check that it's running
kubectl get pods

更新-1
以上步骤有误,不需要第6步,镜像已经从docker hub拉取,所以不需要docker build命令。
有了这个,我继续按照@aurelius在回应中提到的指示去做。

xxxxxxxxx:~$ kubectl run sdk-02 --image=<username>/spring-docker-01:latest --image-pull-policy=Never
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/sdk-02 created

已检查Pod和部署

xxxxxxxxx:~$ kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
sdk-02-b6db97984-2znlt       1/1     Running   0          27s
xxxxxxxxx:~$ kubectl get deployments
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
sdk-02      1         1         1            1           35s

然后在使用其他端口(如8080至8083)时暴露端口8084上的部署

xxxxxxxxx:~$ kubectl expose deployment sdk-02 --type=NodePort --port=8084
service/sdk-02 exposed

然后验证服务是否已启动,检查kubernetes dashboard上是否没有问题,然后检查url

xxxxxxxxx:~$ kubectl get services
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP          7h
sdk-02       NodePort       10.100.125.120   <none>        8084:30362/TCP   13s

xxxxxxxxx:~$ minikube service sdk-02 --url
http://192.168.99.101:30362

当我尝试打开URL时:http://192.168.99.101:30362在浏览器中我收到消息:

This site can’t be reached
192.168.99.101 refused to connect.
Search Google for 192 168 101 30362
ERR_CONNECTION_REFUSED

所以问题是:执行的步骤是否有任何问题?

更新-2
问题在于以下步骤:

xxxxxxxxx:~$ kubectl expose deployment sdk-02 --type=NodePort --port=8084
    service/sdk-02 exposed

在检查我的镜像的Dockerfile时:<username>/spring-docker-01:latest我将其暴露给8083类似EXPOSE 8083的东西可能是导致问题的原因。所以我继续并更改了暴露命令:

xxxxxxxxx:~$ kubectl expose deployment sdk-02 --type=NodePort --port=8083
service/sdk-02 exposed

然后它开始工作。

  • 如果有人有什么要补充的,请随意 *
    但是,我仍然不确定在哪里可以看到我从docker hub中提取的图像的dockerfile。
vshtjzan

vshtjzan1#

docker build不知道您的命令是什么意思,因为flag -t需要特定的格式:
--tag、-t Name和可选的“name:tag”格式的标记
xxxxxxxxxx:~/Downloads$ docker build -t shivnilesh1109/spring-docker-01 .
所以这里正确的命令应该是:

docker build -t shivnilesh1109/spring-docker-01:v1(1) .(2)

(1)你的容器的名称:tag(2)你的dockerfile所在的目录。
在你进行minikube部署之后,只需要运行以下命令就足够了:kubectl run *desired name of deployment/pod* --image=*name of the container with tag* --image-pull-policy=Never
如果这不能解决您的问题,请尝试手动添加Dockerfile的路径。我已经在我的机器上测试过了,在使用正确的图像标记后错误停止,并使用Dockerfile的完整路径进行了测试,否则我会出现与您相同的错误。

sqxo8psd

sqxo8psd2#

对于UPDATE-2问题,也可以帮助您理解Dockerfile和命令kubectl expose中暴露的端口。

Dockerfile:

EXPOSE指令实际上并不发布端口。它的作用是在构建映像的人和运行容器的人之间建立一种文档,说明哪些端口需要发布。
有关更多详细信息,请参见“曝光”。

Kubectl expose:
--port:服务应该服务的端口,如果未指定,则从暴露的资源复制
--target-port:服务应将通信定向到的容器上的端口的名称或编号。可选。

有关详细信息,请参阅kubectl expose
所以我觉得你应该把参数--target-port和你在Dockerfile中暴露的端口一起添加进去。这样端口Map就正确了。

5kgi1eie

5kgi1eie3#

你可以创建一个包含以下内容的Dockerfile:

FROM shivnilesh1109/spring-docker-01

然后运行:

docker build -t my-spring-docker-01 .
huus2vyu

huus2vyu4#

尝试将本地docker镜像添加到minikube的缓存中,如下所示:

minikube cache add docker-image-name:latesttag

然后在yaml文件中设置imagePullPolicy:Never

oxosxuxt

oxosxuxt5#

检查Dockerfile是否在.dockerignore中列出,如果是,则将其注解掉

相关问题