Java 如何在Minikube中运行Spring启动应用程序?
我想在Minikube内部运行,这样我就可以在浏览器中访问端口Java 如何在Minikube中运行Spring启动应用程序?,java,spring-boot,kubernetes,minikube,Java,Spring Boot,Kubernetes,Minikube,我想在Minikube内部运行,这样我就可以在浏览器中访问端口8080(一旦应用程序运行) 为此,我执行以下步骤 启动Docker 运行mvn spring引导:生成映像 使用Minikube Start启动Minikube 使用kubectl Create deployment example-1-engine-1--image=example-1-engine-1创建Minikube部署 使用kubectl Expose部署示例-1-engine-1--type=NodePort--port
8080
(一旦应用程序运行)
为此,我执行以下步骤
Minikube Start
启动Minikubekubectl Create deployment example-1-engine-1--image=example-1-engine-1
创建Minikube部署kubectl Expose部署示例-1-engine-1--type=NodePort--port=8080
和kubectl端口转发服务/example-1-engine-1 8080:8080
公开端口8080Minikube服务示例-1-engine-1
在Minikube中启动应用程序kubectl get pods的输出:
C:\Users\XXXXXXX>kubectl get pods
NAME READY STATUS RESTARTS AGE
example-1-engine-1-d9fc48785-zdvkf 0/1 ImagePullBackOff 0 2d18h
hello-minikube-6ddfcc9757-wj6c2 1/1 Running 1 5d
更新2:我试图输入eval$(minikube-p minikube docker env)
。为此,我首先在Docker中打开了Minikube容器的外壳
在随后出现的窗口中,我输入了eval$(minikube-p minikube docker env)
并得到了响应minikube:not found
在我看来,您的案例可能存在两个问题
1.使用本地构建的Docker映像
您希望在Kubernetes中运行本地构建的Docker映像,但它不能开箱即用。
通常,您有两种选择:
使用docker image push
命令将您的图像共享到注册表或自托管图像,如中所述
使用eval$(minikube docker env)
命令将终端指向minikube内部的docker守护程序,如中所述
2.使用带有特定标记的Docker图像
如我所见,您的图像具有特定的标签1.0-SNAPSHOT
:
$ docker images
REPOSITORY TAG
example-1-engine-1 1.0-SNAPSHOT
您需要在kubectl create deployment
命令中指定此标记:
$ kubectl create deployment example-1-engine-1 --image=example-1-engine-1:1.0-SNAPSHOT
我已经部署了您的,以显示它对我的预期效果
首先,要让我的终端使用minikube中的docker守护进程,我运行了:
$ eval $(minikube -p minikube docker-env)
然后我创建了Docker镜像并部署了example-1-engine-1
app:
$ mvn spring-boot:build-image
...
[INFO] Successfully built image 'docker.io/library/example-1-engine-1:1.0-SNAPSHOT'
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
$ kubectl create deployment example-1-engine-1 --image=example-1-engine-1:1.0-SNAPSHOT
deployment.apps/example-1-engine-1 created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
example-1-engine-1-c98f8c569-xq2cv 1/1 Running 0 13s
最后,我公开了example-1-engine-1
部署
,如您的示例所示:
$ kubectl expose deployment example-1-engine-1 --type=NodePort --port=8080
service/example-1-engine-1 exposed
$ kubectl port-forward service/example-1-engine-1 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
$ minikube service example-1-engine-1
|-----------|--------------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|--------------------|-------------|---------------------------|
| default | example-1-engine-1 | 8080 | http://192.168.49.2:32766 |
|-----------|--------------------|-------------|---------------------------|
Opening service default/example-1-engine-1 in default browser...
在“打开浏览器”选项卡中,我看到:
此外,我在http://127.0.0.1:8080
不幸的是,我没有Windows机器(如您的示例中所示),而是使用Linux,因此无法准确再现您的问题。在我看来,您的案例可能存在两个问题
1.使用本地构建的Docker映像
您希望在Kubernetes中运行本地构建的Docker映像,但它不能开箱即用。
通常,您有两种选择:
使用docker image push
命令将您的图像共享到注册表或自托管图像,如中所述
使用eval$(minikube docker env)
命令将终端指向minikube内部的docker守护程序,如中所述
2.使用带有特定标记的Docker图像
如我所见,您的图像具有特定的标签1.0-SNAPSHOT
:
$ docker images
REPOSITORY TAG
example-1-engine-1 1.0-SNAPSHOT
您需要在kubectl create deployment
命令中指定此标记:
$ kubectl create deployment example-1-engine-1 --image=example-1-engine-1:1.0-SNAPSHOT
我已经部署了您的,以显示它对我的预期效果
首先,要让我的终端使用minikube中的docker守护进程,我运行了:
$ eval $(minikube -p minikube docker-env)
然后我创建了Docker镜像并部署了example-1-engine-1
app:
$ mvn spring-boot:build-image
...
[INFO] Successfully built image 'docker.io/library/example-1-engine-1:1.0-SNAPSHOT'
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
$ kubectl create deployment example-1-engine-1 --image=example-1-engine-1:1.0-SNAPSHOT
deployment.apps/example-1-engine-1 created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
example-1-engine-1-c98f8c569-xq2cv 1/1 Running 0 13s
最后,我公开了example-1-engine-1
部署
,如您的示例所示:
$ kubectl expose deployment example-1-engine-1 --type=NodePort --port=8080
service/example-1-engine-1 exposed
$ kubectl port-forward service/example-1-engine-1 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
$ minikube service example-1-engine-1
|-----------|--------------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|--------------------|-------------|---------------------------|
| default | example-1-engine-1 | 8080 | http://192.168.49.2:32766 |
|-----------|--------------------|-------------|---------------------------|
Opening service default/example-1-engine-1 in default browser...
在“打开浏览器”选项卡中,我看到:
此外,我在http://127.0.0.1:8080
不幸的是,我没有Windows机器(如您的示例中所示),而是使用Linux,因此无法准确再现您的问题。您能否显示kubectl get pods
的输出,我假设应用程序未部署在minikube中。minikube服务--url
;然后尝试输出。@Thomas请参阅更新1。是的,确认了我的怀疑,请参阅matt_J的答案。如果您显示kubectl get pods
的输出,我假设应用程序未部署在minikube中。minikube服务--url
;然后尝试输出。@Thomas请参阅更新1。是的,证实了我的怀疑,请参阅matt_jThanks的答案以获取您的答案。请查看更新2,如果您看到任何明显的错误,请告诉我。eval$(minikube docker env)
命令应该在主机的终端中运行(与您运行的终端相同,例如minikube start
或kubectl get pods
)不在minikube内。我在Windows下找不到此命令。然而,我设法使用了你提出的另一种方法(推到Docker Hub),而且似乎有效。谢谢谢谢你的回答。请查看更新2,如果您看到任何明显的错误,请告诉我。eval$(minikube docker env)
命令应该在主机的终端中运行(与您运行的终端相同,例如minikube start
或kubectl get pods
)不在minikube内。我在Windows下找不到此命令。然而,我设法使用了你提出的另一种方法(推到Docker Hub),而且似乎有效。谢谢