我正在关注以下URL:How to use local docker images with Minikube? 我无法添加评论,所以想把我的问题放在这里:
在笔记本电脑上,我有Linux Mint OS。详细信息如下:
Mint version 19,
Code name : Tara,
PackageBase : Ubuntu Bionic
Cinnamon (64-bit)
根据上面链接的答案:
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所描述的那样,它将重用Minikube的Docker守护进程,并带有eval $(minikube docker-env)。
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之前和之后拉出了不同的图像。
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
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
UPDATE-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仪表板上检查是否没有问题,然后检查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
所以问题是:执行的步骤有问题吗?
UPDATE-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。
答案 0 :(得分:1)
docker build
不知道您的command是什么意思,因为标志-t需要特定格式:
-tag,-t名称以及(可选)“ name:tag ”格式的标签
xxxxxxxxxx:~/Downloads$ docker build -t shivnilesh1109/spring-docker-01 .
因此此处的正确命令应为:
docker build -t shivnilesh1109/spring-docker-01:v1(1) .(2)
(1)所需的容器名称:标签 (2)您的dockerfile所在的目录。
继续进行minikube部署后,只需运行即可:
kubectl run *desired name of deployment/pod* --image=*name of the container with tag* --image-pull-policy=Never
如果这不能解决您的问题,请尝试手动将路径添加到Dockerfile。我已经在我的机器上对此进行了测试,并在使用了正确的映像标记后停止了错误,并使用Dockerfile的完整路径对其进行了测试,否则我将遇到与您相同的错误。
答案 1 :(得分:1)
对于您的UPDATE-2问题,还可以帮助您了解Dockerfile和命令kubectl expose
中公开的端口。
Dockerfile:
EXPOSE指令实际上并未发布端口。它 充当构建者之间的一种文档类型 图片和运行容器的人,关于哪些端口是 打算出版。
有关更多详细信息,请参见EXPOSE。
Kubectl公开:
-端口:服务应在其上服务的端口。从未公开的资源复制(如果未指定)
-目标端口:服务应将流量定向到的容器上端口的名称或端口号。可选。
有关更多详细信息,请参见kubectl expose。
因此,我认为您应该将参数--target-port
与您在Dockerfile中公开的端口一起添加。然后端口映射将是正确的。
答案 2 :(得分:0)
您可以使用以下内容创建一个Dockerfile:
FROM shivnilesh1109/spring-docker-01
然后运行:
docker build -t my-spring-docker-01 .