我在关注这个 URL:如何在 Minikube 中使用本地 docker 图像? 我无法添加评论,所以想在这里提出我的问题:
在我的笔记本电脑上,我有 Linux Mint 操作系统。详情如下:
Mint version 19,
Code name : Tara,
PackageBase : Ubuntu Bionic
Cinnamon (64-bit)
根据上述链接的答案:
- 我启动了 minikube 并检查了 pod 和部署
xxxxxxxxx:~$ pwd /home/sj xxxxxxxxxx:~$ minikube start xxxxxxxxxx:~$ kubectl get pods xxxxxxxxxx:~$ kubectl get deployments
我运行了命令 docker images
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
- 我运行以下命令:
评估 $(minikube docker-env)
现在,当我检查 docker 映像时,看起来就像README中描述的那样,它使用 eval $(minikube docker-env) 重用了 Minikube 中的 Docker 守护程序。
xxxxxxxxxxxxx:~$ docker 图像
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 步前后拉取不同的图像。
- 因为我没有看到我想放在 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
- 验证我是否可以使用“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
- 然后我尝试按照引用的链接步骤中的说明构建图像。
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
然后在端口 8084 上公开部署,因为我正在使用其他端口,例如 8080 到 8083
xxxxxxxxx:~$ kubectl expose deployment sdk-02 --type=NodePort --port=8084
service/sdk-02 exposed
然后验证服务是否已启动,检查 kubernetes 仪表板是否没有问题,然后检查 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。