Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Minikube中运行Spring启动应用程序?_Java_Spring Boot_Kubernetes_Minikube - Fatal编程技术网

Java 如何在Minikube中运行Spring启动应用程序?

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

我想在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
    kubectl端口转发服务/example-1-engine-1 8080:8080
    公开端口8080
  • 在Minikube开始涂抹
  • 使用
    Minikube服务示例-1-engine-1
    在Minikube中启动应用程序
  • 出现以下输出:

    但是,浏览器无法在端口8080上打开web应用程序(浏览器无法连接到位于的应用程序)

    我做错了什么?如何确保相关应用程序在Minikube内部运行,并且我可以访问端口8080的web应用程序?

    更新1:以下是
    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),而且似乎有效。谢谢