我有一个用list命令轮询ftp服务器的服务。我使用本地被动模式,使用具有以下设置的ftpsclient:
ftpClient.setTrustManager(TrustManagerUtils.getAcceptAllTrustManager());
ftpClient.setDataTimeout(1800000); //30 minutes
ftpClient.setBufferSize(1281000000);
ftpClient.setControlKeepAliveTimeout(120);
ftp服务器目录中有大约700000个文件,所以服务器需要时间来响应。在我的本地机器上,通过启动原始java应用程序,检索文件列表大约需要5分钟,在windows上的docker容器中,它同样可以正常工作,filezilla—没有问题,但时间更长。但是,当我在linux机器上运行容器(ubuntu18.04.4lts)时,它无法检索数据,尽管它可以连接到服务器。在超时设置中指定的时间之后,我收到:
原因:java.net.sockettimeoutexception:读取在java.net.socketinputstream.socketread0(本机方法)~[?:?]在java.net.socketinputstream.socketread(socketinputstream)处超时。java:115)~[?:?]位于java.net.socketinputstream.read(socketinputstream。java:168)~[?:?]位于java.net.socketinputstream.read(socketinputstream。java:140)[?:?]在sun.nio.cs.streamdecoder.readbytes(streamdecoder。java:284)~[?:?]位于sun.nio.cs.streamdecoder.implread(streamdecoder。java:326)~[?:?]位于sun.nio.cs.streamdecoder.read(streamdecoder。java:178)~[?:?]位于java.io.inputstreamreader.read(inputstreamreader。java:185)~[?:?]位于java.io.bufferedreader.fill(bufferedreader。java:161)[?:?]在java.io.bufferedreader.readline(bufferedreader。java:326)~[?:?]在java.io.bufferedreader.readline(bufferedreader。java:392)~[?:?]位于org.apache.commons.net.ftp.ftpfileentryparserimpl.readnextentry(ftpfileentryparserimpl。java:53)~[app.jar:?]位于org.apache.commons.net.ftp.ftplistparseengine.readstream(ftplistparseengine)。java:142)~[app.jar:?]在org.apache.commons.net.ftp.ftplistparseengine.readserverlist(ftplistparseengine)。java:118)~[app.jar:?]位于org.apache.commons.net.ftp.ftpclient.initialistparsing(ftpclient。java:3450)~[app.jar:?]位于org.apache.commons.net.ftp.ftpclient.initialistparsing(ftpclient。java:3371)~[app.jar:?]在org.apache.commons.net.ftp.ftpclient.initiatelistparsing(ftpclient。java:3308)~[app.jar:?]位于org.my.org.ftp.ftpoperator.listdirectory(ftpoperator。java:30)~[app.jar:?]
我想这不是防火墙的问题,因为我有类似的服务,轮询外部服务器,它工作正常。这两个服务都使用apacheftp客户端库的本地被动模式。
docker编写文件:
version: '2'
services:
ingest:
image: pl/ingest
ports:
- "8038:8038"
volumes:
- ./logs:/logs
- ./processedFiles:/processedFiles
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1500
1条答案
按热度按时间9rygscc11#
在docker compose中将网络模式从网桥更改为主机,使容器能够通过ftps/ftp列出文件: