Ich verbrachte das Wochenende damit, über die Docker-Dokumentation zu streunen und mit den Spielzeuganwendungen und Beispielprojekten herumzuspielen. Ich versuche jetzt, einen sehr einfachen Web-Service zu schreiben und ihn aus einem Container heraus zu starten. In dem Behälter, möchte ich meine app (a Frühling Boot-App unter der Haube) - genannt bootup - die folgende Verzeichnisstruktur haben:Meine App kann keine Protokolldateien erstellen, wenn sie in Docker gestartet wird
/opt/
bootup/
bin/
bootup.jar ==> the app
logs/
bootup.log ==> log file; GETS CREATED BY THE APP @ STARTUP
config/
application.yml ==> app config file
logback.groovy ==> log config file
Es ist sehr wichtig zu beachten, dass, wenn ich betreibe meine App lokal auf meinem Host-Rechner - außerhalb von Docker - alles funktioniert einwandfrei, einschließlich der Erstellung von Protokolldateien zu meinem Host /opt/bootup/logs
Verzeichnis. Die Endpunkte der App liefern den richtigen Inhalt usw. Alles ist gut und schön.
Also habe ich die folgende Dockerfile
:
FROM openjdk:8
RUN mkdir /opt/bootup
RUN mkdir /opt/bootup/logs
RUN mkdir /opt/bootup/config
RUN mkdir /opt/bootup/bin
ADD build/libs/bootup.jar /opt/bootup/bin
ADD application.yml /opt/bootup/config
ADD logback.groovy /opt/bootup/config
WORKDIR /opt/bootup/bin
EXPOSE 9200
ENTRYPOINT java -Dspring.config=/opt/bootup/config -jar bootup.jar
ich dann über mein Bild bauen:
docker build -t bootup .
ich dann mein Container laufen:
docker run -it -p 9200:9200 -d --name bootup bootup
Ich betreibe docker ps
:
CONTAINER ID IMAGE COMMAND ...
3f1492790397 bootup "/bin/sh -c 'java ..."
So weit, so gut!
Meine App sollte dann eine einfache Webseite unter localhost:9200
dienen, also öffne ich meinen Browser zu http://localhost:9200
und ich bekomme nichts.
Wenn ich docker exec -it 3f1492790397 bash
in meinen Container „ssh“, ich sehe alles gut aussieht, außer das /opt/bootup/logs
Verzeichnis, das eine bootup.log
Datei in ihm haben sollte - beim Start erstellt - ist stattdessen leer.
Ich versuchte docker attach 3f1492790397
und anschließend http://localhost:9200
in meinem Browser schlagen, um zu sehen, ob das würde einige Standardausgabe (mein App meldet ich sowohl /opt/bootup/logs/bootup.log
sowie die Konsole) erzeugt, aber das ergibt keine Ausgabe.
Also ich denke, was passiert ist, dass meine App (aus irgendeinem Grund) keine Berechtigung zum Erstellen einer eigenen Protokolldatei, wenn der Container startet, und setzt die App in einem seltsamen Zustand, oder sogar verhindert es von Anfang an zusammen. So
Ich frage:
- Gibt es eine Möglichkeit zu sehen, welche Benutzer meine Anwendung wird gestartet als ?; oder
- Gibt es eine Möglichkeit, Standard-Ausgabe zu beenden, während der Container gestartet wird? helfen Sie mir nach der Inbetriebnahme Anbringen nicht, weil ich durch die Zeit denken, betreibe ich den
docker attach
Befehl die App bereits
Vielen Dank im Voraus gewürgt hat!
Wenn Sie 'docker run -it image' ausführen, fügen Sie standardmäßig stdout/stderr hinzu. Über das Problem der App, haben Sie überprüft, ob die App permisson in diesen Ordner schreiben? – German
Ich habe ein Projekt erstellt, um zu überprüfen, ob Sie ein Berechtigungsproblem hatten, aber nein. Alles deutet darauf hin, dass Sie ein Problem in der Anwendung haben. Ich verlasse das Beispiel in: https://github.com/nitzap/so-java-docker-log – German