2017-12-18 1 views
0

Ich schrieb einen einfachen Microservice in Java mit nanohttpd für den HTTP-Server. Ich bin in der Lage es aus der JAR-Datei aus der Windows-10-Eingabeaufforderung wie folgt direkt auszuführen:Nanohttpd beendet sofort, wenn in Docker-Container ausgeführt

D:\Docker\JoeMicroserviceTest\src>java -jar JoeMicroserviceTest-1.0-SNAPSHOT.jar 

Der Server startet gut und zeigt:

Server gestartet wird, drücken Sie die Eingabetaste zu stoppen.

Ich kann dann HTTP-Anfragen gegen den Server machen, und alles funktioniert super.

Ich legte es dann in ein Docker-Bild, und wenn ich es starte, startet der Container, der Nanohttpd-Server startet, dann sofort gestoppt. Das sehe ich:

Server gestartet, Enter drücken, um zu stoppen.

Server gestoppt.

Es gibt so gut wie keine Verzögerung zwischen dem Starten und Stoppen. Und dann verlässt mein Container natürlich, weil der Serverprozess gestoppt hat.

Hier ist meine dockerfile:

FROM openjdk:8 
COPY ./src/ /usr/src/JoeMicroserviceTest 
WORKDIR /usr/src/JoeMicroserviceTest 
CMD ["java","-jar","JoeMicroserviceTest-1.0-SNAPSHOT.jar"] 
EXPOSE 8080 

ich es so bauen:

docker build -t joe-microservice-test . 

ich es wie folgt aus:

docker run -p 8080:8080 joe-microservice-test 

Warum dies geschehen könnte?

+0

fügen Sie '-d' hinzu, um es im Hintergrund zu starten (' Detached') – BMW

+0

@BMW, ich habe es gerade versucht. Er gibt eine lange Zeichenfolge aus und kehrt dann zur Eingabeaufforderung zurück. Wenn ich "docker ps" ausführe, listet es keine Container auf und ich kann keine HTTP-Anfragen an den Server richten, daher scheint es nicht ausgeführt zu werden. – JoeMjr2

Antwort

0

Ok, ich habe das funktioniert durch Hinzufügen von "-dit" zum Ausführen Befehl. Hier ist der Arbeitsstartbefehl:

docker run -dit -p 8080:8080 joe-microservice-test 

Hier another question, die hilft erklären, warum sie gebraucht wird.

Verwandte Themen