2017-01-10 6 views
2

Ich habe eine Spring-Boot-basierte Java-Anwendung, die gut von der Befehlszeile (Embedded Tomcat Standalone) läuft.Spring Boot App läuft gut Standalone, Fehler in Docker

Problem

Wenn ich die app in Docker laufen, es läuft nicht richtig. Die Konsole zeigt an, dass die Anwendung problemlos gestartet werden kann. jedoch zeigt der Browser die folgende Fehlerseite:

Whitelabel Fehler Seite

Diese Anwendung hat keine explizite Zuordnung für/Fehler, so dass Sie dies als Ausweich sehen.

[Ich verstehe die Nachricht sagt keine Zuordnung für '/ Fehler' URL. Allerdings möchte ich die Ursache]

Zusätzliche Informationen/Context

  • Frühling Boot 1.4.2
  • Docker Plugin
  • Ausgang ist 'Krieg' Datei kennen, die läuft auch eigenständige
  • Ich führe Docker Image im "Host" Netzwerkmodus (--net = Host) aus, so dass es auf die Datenbank zugreifen kann (mysql auf meinem localhost)

build.gradle Ziel

task buildDocker(type: Docker, dependsOn: build) { 
    push = false 
    applicationName = jar.baseName 
    dockerfile = file('src/main/docker/Dockerfile') 
    doFirst { 
    copy { 
     from war 
     into stageDir 
    } 
    } 
} 

dockerfile

FROM frolvlad/alpine-oraclejdk8:slim 
VOLUME /tmp 
ADD floss.war app.jar 
RUN sh -c 'touch /app.jar' 
ENV JAVA_OPTS="" 
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ] 

Befehl auszuführen Docker

dockerImg=1248c47d9cfa 
docker run \ 
     -it \ 
     --net=host \ 
     -e SPRING_APPLICATION_JSON="$SPRING_APPLICATION_JSON" \ 
     $dockerImg 

Ich bin neu in Andockfenster und Anregungen schätzen würde.

danke im voraus!

+1

Kannst du '' 'docker ps''', dann' '' docker logs --tail 100 -f $ {YOUR_CONTAINER_ID} '' 'ausführen, um zu sehen, ob beim Auftreten des Fehlers StackTrace in stdout/stderr angezeigt wird? – EwyynTomato

Antwort

1

Ich vermute, dass es aufgrund der fehlenden Option -p ist, können Sie dies versuchen. Ändern Sie den Port, wenn es anders ist. Docker run -p 8080: 8080 -\ --net = host \ -SPRING_APPLICATION_JSON = "$ SPRING_APPLICATION_JSON" \ $ dockerImg

3

Probleme:

  1. Kein ausgesetzter Hafen in dockerfile
  2. Kein Port-Mapping mit Host.

Sol: 1. Anwendung Port in dockerfile belichten und bauen Bild EXPOSE $application_port 2.dann run docker run -p 8080:8080 -d -e SPRING_APPLICATION_JSON="$SPRING_APPLICATION_JSON" $dockerImg

1

Ich hatte das gleiche Problem. Sie scheinen das gleiche Docker-Beispiel für Spring Boot zu verwenden wie ich. Wie Sie sehen können, erhält die WAR-Datei eine .jar-Erweiterung, wenn sie in das Docker-Image eingefügt wird, und nicht .war.

Ich konnte das Problem lösen, indem ich die Datei "app.war" anstelle von "app.jar" aufruft und die Java-Startparameter entsprechend änderte.

Wenn Sie die Erweiterung ".jar" verwenden, funktioniert der Zugriff auf statische Ressourcen einwandfrei, aber der Zugriff auf alle dynamischen Inhalte (JSPs, ...) führt zu einem 404-Fehler.

Verwandte Themen