在docker中,spring-boot不能启动

在docker中运行我的spring启动应用程序有点问题。

堆栈:maven 3+,春季启动(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的问题:本地:我试图运行我的应用程序与terminal跟随命令

 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???? 

这是不好的,我可以容忍它。 但不是docker工人。 当上面的命令将运行在docker,然后docker停止容器(因为 – >应用程序退出状态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返回控制。 我寻找的方法,使我可以configurationspring应用程序的可预见的行为或任何想法如何改善我的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日志的容器 在这里输入图像说明

例如:当我启动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,这个过程应该在前台开始,并且提示不应该直接返回。

为了保持简单和干净,我们在database.properties中添加了数据库属性

mongo db数据库configuration

 spring.data.mongodb.database=abc-auth spring.data.mongodb.host=192.168.2.2 spring.data.mongodb.port=27017 spring.data.mongodb.password=abc234quth spring.data.mongodb.username=abc-auth 

我们在运行Docker的时候推送这个文件,所以只有数据库属性会被现有的application.properties覆盖

 ENTRYPOINT ["java","-jar","/home/docker/service/abc.jar","--spring.config.location=application.properties"]