2017-08-23 8 views
1

Springブートプロジェクトでは、デフォルトの場所をリソースフォルダに変更する必要があります。私はこのコードを使用して必要な結果を得ています:Dockerのスプリングブート静的フォルダ

@Bean 
WebMvcConfigurer configurer() { 
    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void addResourceHandlers (ResourceHandlerRegistry registry) { 
      String location = "file:" + System.getProperty("user.dir") + "/pictures/"; 

      registry.addResourceHandler("/pictures/**"). 
        addResourceLocations(location); 

      super.addResourceHandlers(registry); 
     } 
    }; 
} 

私のローカルマシンでは、すべてが動作します。ときにドッキングウィンドウの画像を作成し、everyhingがOKのようですが、私は、ディレクトリ内のファイルの一部を要求しようとすると、それはこの例外をスローし、それを実行します。全体の例外のstack

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) 

画像フォルダがドッカー画像にあるかどうかと、そこにあるかどうかを確認しました。この問題の原因はわかりません。ファイルパスの前にそれがfile:になることはできますか?私はこの変数System.getProperty("user.dir")を別の関数で使用していますが、正しく動作するので、問題であってはいけません。

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

「画像」と呼ばれるホストへのFTP接続をしようとした場合のように、「FTPClient」から「UnknownHostException」が発生するというのは変です。 – Berger

+0

はい、そういうわけで私はインターネット上で何かを見つけることができず、それがDockerに起因すると思っています。 – kirpt

+0

コードの一部にFTP接続を試みていますが、それを投稿することもできます(スタックトレースにカスタムクラスのいずれかが表示されているかどうかも参照してください)。 – Berger

答えて

1

あなたはリソース

file:abc/xyzfile:///abc/xyzのローカルファイルの処理を行う際に使用できる2つの形式があります。

file:abc/xyzは、相対パスabc/xyzから配信したいという意味です。

file:///abc/xyzは、絶対パス/abc/xyzからの配信を希望することを意味します。あなたのケースuser.dir

は、おそらくfile://picturesとしてパスを作るドッカ容器内/ました。そのため、FTPハンドラがJavaによってアクティブ化されていたのです

関連する問題