2016-06-22 14 views
5

Ich habe ein kleines Problem mit meiner Spring-Boot-Anwendung in Docker ausführen.Spring-Boot kann nicht in Docker starten

Stapel: Maven 3+, Federverschluß (JPA/rest/Anlegesteg) - mysql - in Docker einsetzen

Also, ich habe in meiner pom-Datei

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

Umwelt: Ubuntu 16.04 x64 Das Problem: Lokal: ich versuche, meine app mit Follow-Befehl im 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???? 

es ist nicht gut zu laufen durch i tolerat kann e es. Aber kein Docker. Wenn Befehle werden über in Andockfensters ausgeführt werden dann Andockfensters Anschlag Behälter (da -> app Ausgang mit dem Status 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 werden Behälter 1 und unmittelbar zweiten Startbehälter weil Java Rückstellsteuerung stoppen. Ich suche nach einer Methode, mit der ich die Spring-App für vorhersehbares Verhalten konfigurieren kann, oder nach Ideen, wie ich meine Docker-Anweisungen verbessern kann. mein dockerfile Inhalt:

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 Protokolle eines Behälters enter image description here

Zum Beispiel: wenn ich NodeJS App habe die Kontrolle erst zurück, wenn Anwendung starten nicht fertig

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

Können Sie Ihre Dockerfile, die Sie verwendet haben, posten? Und was ist nicht gut, dass du tolerieren kannst? – techtabu

+0

Entschuldigung für mein Englisch. Ich meine, ich kann dieses Federverhalten lokal tolerieren, aber nicht in Docker –

+0

, wenn die App (Java) mit dem Fehlercode 1 beendet - das heißt, Sie haben einige Probleme in der Umgebung, nicht Spring Boot. Suchen Sie die ID des Dockercontainers oder den Namen, und verwenden Sie 'docker logs ', um herauszufinden, was dort fehlgeschlagen ist. – jdevelop

Antwort

8

ich denke, die Problem ist das kaufmännische Und (&) in Ihrer Befehlszeile:

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

versuchen, es zu entkommen:

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

Der Ampersand bezeichnet die Schale Ihren Prozess im Hintergrund zu starten. Genau das passiert auf Ihrem lokalen Rechner. Wenn Sie Ihr Jar starten, sollte der Prozess im Vordergrund beginnen ... und die Eingabeaufforderung sollte nicht direkt zurückkehren.

0

es einfach zu halten und sauber, haben wir Datenbankeigenschaften in den database.properties hinzugefügt

Mongo db Datenbankkonfiguration

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 

Wir diese Datei drücken, während die Docker ausgeführt wird, so dass nur Eigenschaften Datenbank Überschreibung mit der vorhandenen application.properties

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