Java Docker中的Spring Boot静态文件夹

Java Docker中的Spring Boot静态文件夹,java,spring,spring-mvc,docker,spring-boot,Java,Spring,Spring Mvc,Docker,Spring Boot,在SpringBoot项目中,我必须将默认位置更改为资源文件夹。我使用此代码来实现想要的结果: @Bean WebMvcConfigurer configurer () { return new WebMvcConfigurerAdapter() { @Override public void addResourceHandlers (ResourceHandlerRegistry registry) { String locati

在SpringBoot项目中,我必须将默认位置更改为资源文件夹。我使用此代码来实现想要的结果:

@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);
        }
    };
}
在我的本地机器上,一切正常。当创建docker映像并每次运行时,似乎一切正常,但当我尝试请求目录中的某些文件时,它会引发以下异常:

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)
整个例外

我检查了图片文件夹是否在docker images中,是否在那里。我不确定是什么导致了这个问题。文件路径之前是否有
文件:
?我在另一个函数中使用了这个变量
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" ]

在对资源进行本地文件处理时,可以使用两种格式

文件:abc/xyz
file:///abc/xyz

file:abc/xyz
表示您希望从相对路径
abc/xyz
提供服务

file:///abc/xyz
表示您希望从绝对路径服务
/abc/xyz


在您的情况下,
user.dir
可能位于docker容器内,路径为
file://pictures
。由于FTP处理程序正被Java激活,奇怪的是它从
FTPClient
引发了一个
UnknownHostException
,就像它试图与一个名为
pictures
的主机进行FTP连接一样。是的,这就是为什么我在互联网上找不到任何东西,并认为这是由Docker造成的。你有没有尝试进行FTP连接的代码部分,你可以发布它(同时看看堆栈跟踪是否指示你的自定义类之一)。?在Docker中user.dir的值是什么?尝试将
“文件:
更改为
”文件://”
,看看这是否有帮助