簡體   English   中英

無法加載 Spring 在 Docker 中運行的引導應用程序

[英]Unable to load Spring Boot application running in Docker

我用 Gradle v5.6.4 創建了一個簡單的 Spring Boot v2.1.10 應用程序,並嘗試在 ZC5FD214CDD0D2B3B4272E73B022BA5C25Z v18.09.9 中運行它,構建該應用程序在本地運行,但是當我在 Docker 中運行它時,網頁不會在瀏覽器中加載。 雖然,它在 Docker 控制台中正確啟動,沒有任何錯誤。

Dockerfile 內容

FROM java:8
EXPOSE 9090:8181
ADD /build/libs/docker-app-0.0.1-SNAPSHOT.jar docker-app-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","docker-app-0.0.1-SNAPSHOT.jar"]

Springboot 應用程序 controller

@RestController
public class Resource {

    @GetMapping(value = "/home")
    public String home() {
        return "<h1>up!!!.....running from docker!!!</h1>";
    }
}

Docker 運行命令:~/java-project/docker-app$ sudo docker run -p 9090:8181 springboot

Docker 控制台 output

:~/java-project/docker-app$ sudo docker run -p 9090:8181 springboot

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v2.1.10.RELEASE)

2019-11-19 20:38:03.870  INFO 1 --- [           main] com.DockerAppApplication                 : Starting DockerAppApplication on 93febc16ff7d with PID 1 (/docker-app-0.0.1-SNAPSHOT.jar started by root in /)
2019-11-19 20:38:03.877  INFO 1 --- [           main] com.DockerAppApplication                 : No active profile set, falling back to default profiles: default
2019-11-19 20:38:06.459  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9090 (http)
2019-11-19 20:38:06.528  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-11-19 20:38:06.528  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-11-19 20:38:06.669  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-11-19 20:38:06.669  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2642 ms
2019-11-19 20:38:07.012  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-11-19 20:38:07.333  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path ''
2019-11-19 20:38:07.339  INFO 1 --- [           main] com.DockerAppApplication                 : Started DockerAppApplication in 4.276 seconds (JVM running for 5.029)

注意:當我在運行命令和 Dockerfile 中提供相同的端口號( sudo docker run -p 9090:9090 springboot )時,它工作正常。

docker運行命令中端口號不同有什么不同?

TL;博士

將映射更改為-p 8181:9090


你搞錯了。 -p 9090:8181 8181將在主機的端口9090上公開容器的端口 8181——假設該端口未使用。 您可以有效地使用主機上的端口9090 ,但是容器中的 Spring Boot 應用程序沒有監聽8181 ,因此您不會得到任何響應。

當您執行-p 9090:9090時,您正確地將9090暴露在主機和容器上; 同樣, Spring 引導應用程序正在有效地偵聽端口9090 ,因此您可以點擊 Spring 引導應用程序並取回一些東西。

無論如何,您正在尋找的是-p 8181:9090 這將讓您在瀏覽器/主機的端口8181上使用應用程序,而 Spring 引導應用程序使用9090

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM