gpt4 book ai didi

java - spring-boot 无法在 docker 中启动

转载 作者:IT老高 更新时间:2023-10-28 21:43:34 25 4
gpt4 key购买 nike

我在 docker 中运行我的 Spring Boot 应用程序时遇到了一点问题。

堆栈:maven 3+,spring boot(jpa/rest/jetty) - mysql - 在 docker 中部署

所以,我的 pom 文件中有

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.M3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<!-- SPRING BOOT DEPENDENCIES -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- add for exlude tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- END SPRING BOOT DEPENDENCIES-->
<!-- Jetty (tomcat replacement) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- mysql connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- optional dependency javax.el -->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- google http client -->
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
<version>1.21.0</version>
</dependency>
<!-- google http jackson -->
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-jackson2</artifactId>
<version>1.21.0</version>
</dependency>
</dependencies>

环境:Ubuntu 16.04 x64问题:本地:我尝试在终端中使用以下命令运行我的应用程序

user$ java -Xmx768m -jar /mnf-backend.jar --spring.datasource.url=jdbc:mysql://$MYSQL_PORT_3306_TCP_ADDR/app_1?autoReconnect=true&useSSL=false
user$ #<--- LOOK AT THIS jvm has return of control with 1 status (or same status but not negative)
:: Spring Boot :: (v1.4.0.M3) # <--- spring boot starts by itself. HOW????

这不好,我可以忍受。但不是 jetty worker 。当上面的命令将在 docker 中运行时, docker stop 容器(因为 -> 应用程序以状态 1 退出)

ENTRYPOINT ["java", "-Xmx768m", "-jar", "/mnf-backend.jar", "--spring.datasource.url=jdbc:mysql://$MYSQL_PORT_3306_TCP_ADDR/app_1?autoReconnect=true&useSSL=false"]

Docker 将在 1 秒后启动容器并立即停止容器,因为 java 返回控制权。我寻找允许我配置 spring 应用程序以获得可预测行为或任何想法如何改进我的 docker 指令的方法。我的 dockerfile 内容:

FROM frolvlad/alpine-oraclejdk8:slim

ENV MNFB_ENV production
ENV SERVER_PORT 9000

ADD ./builds/mnf-latest.jar mnf-backend.jar

EXPOSE 9000



ENTRYPOINT ["java", "-Xmx768m", "-jar", "/mnf-backend.jar", "--spring.datasource.url=jdbc:mysql://$MYSQL_PORT_3306_TCP_ADDR/minifinance?autoReconnect=true&useSSL=false"]

容器的docker日志 enter image description here

例如:当我启动 nodejs 应用程序控件时,直到应用程序未完成才返回

user$ node ./server.js
[...here program output and stdout strings]
[... it may be stopped by ctrl+c for example]

最佳答案

我认为问题在于命令行中的 & 符号:

--spring.datasource.url=jdbc:mysql://$MYSQL_PORT_3306_TCP_ADDR/app_1?autoReconnect=true&useSSL=false"]

尝试逃避它:

--spring.datasource.url=jdbc:mysql://$MYSQL_PORT_3306_TCP_ADDR/app_1?autoReconnect=true\&useSSL=false"]

& 符号表示在后台启动进程的 shell。这正是您的本地机器上发生的事情。如果你启动你的 jar,进程应该在前台启动......并且提示不应该直接返回。

关于java - spring-boot 无法在 docker 中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37976796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com