2017-08-23 5 views
1

In Spring Boot-Projekt muss ich den Standardspeicherort in den Ressourcenordner ändern. Ich verwende diesen Code, um die gewünschten Ergebnisse zu erzielen:Statischer Spring Boot-Ordner in Docker

Auf meiner lokalen Maschine funktioniert alles. Wenn Sie das Bild Docker erstellen und führen Sie es everyhing scheint in Ordnung zu sein, aber wenn ich versuche, einige der Dateien in dem Verzeichnis zu beantragen wirft es diese Ausnahme:

2017-08-23 13:03:48.652 ERROR 8 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 

java.net.UnknownHostException: pictures 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_144] 
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_144] 
at java.net.Socket.connect(Socket.java:538) ~[na:1.8.0_144] 
at sun.net.ftp.impl.FtpClient.doConnect(FtpClient.java:964) ~[na:1.8.0_144] 
at sun.net.ftp.impl.FtpClient.tryConnect(FtpClient.java:924) ~[na:1.8.0_144] 
at sun.net.ftp.impl.FtpClient.connect(FtpClient.java:1019) ~[na:1.8.0_144] 
at sun.net.ftp.impl.FtpClient.connect(FtpClient.java:1005) ~[na:1.8.0_144] 
at sun.net.www.protocol.ftp.FtpURLConnection.connect(FtpURLConnection.java:294) ~[na:1.8.0_144] 
... more logs (not sure if they are needed to find the problem) 

Die ganze stack der Ausnahme.

ich geprüft, ob die Ordner Bilder in den Docker Bildern und ja sein ist. Ich bin mir nicht sicher, was dieses Problem verursacht. Kann es sein, dass file: vor dem Dateipfad? Ich benutze diese Variable System.getProperty("user.dir") in einer anderen Funktion und es funktioniert ordnungsgemäß, so dass es nicht das Problem sein muss.

Dockerfile

FROM frolvlad/alpine-oraclejdk8:slim 
VOLUME /tmp 
RUN mkdir /files 
ENV JAVA_OPTS="-Xmx512m -Xss512k" 
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ] 
+0

Das seltsame Teil von Java aktiviert wird, ist, dass es einen 'UnknownHostException' aus der' FTPClient' wirft, wie wenn es wurde versucht, eine FTP-Verbindung zu einem Host 'pictures' genannt zu tun. – Berger

+0

Ja, deshalb kann ich nichts im Internet finden und denke, dass es von Docker verursacht wurde. – kirpt

+0

Haben Sie einen Teil Ihres Codes, der versucht, FTP-Verbindungen herzustellen, und könnten Sie ihn veröffentlichen (sehen Sie auch, ob der Stack-Trace eine Ihrer benutzerdefinierten Klassen anzeigt). – Berger

Antwort

1

Es gibt zwei Formate, die verwendet werden können, wenn Sie lokale Datei Umgang mit Ressourcen

file:abc/xyz und file:///abc/xyz tun.

file:abc/xyz bedeutet, dass Sie von einem relativen Pfad abc/xyz dienen möchten.

file:///abc/xyz bedeutet, dass Sie einen absoluten Pfad liefern möchten /abc/xyz.

In Ihrem Fall user.dir war wahrscheinlich / innerhalb der Docker Container den Pfad als file://pictures. Aufgrund dessen wurde der FTP-Handler