当前位置: 首页 > 知识库问答 >
问题:

在Linux上尝试列出Docker容器中的FTP服务器目录时读取超时

禄和宜
2023-03-14

我有用LIST命令轮询FTP服务器的服务。我使用本地被动模式,使用FTPSClient,设置如下:

ftpClient.setTrustManager(TrustManagerUtils.getAcceptAllTrustManager());
ftpClient.setDataTimeout(1800000); //30 minutes
ftpClient.setBufferSize(1281000000);
ftpClient.setControlKeepAliveTimeout(120);

FTP服务器目录中有大约700,000个文件,所以服务器需要时间来响应。在我的本地机器上,通过启动原始Java应用程序,它需要大约5分钟来检索文件列表,在Windows上的Docker容器中,它也可以毫无问题地工作在同一时间,FileZilla-没有问题,但更长。然而,当我在Linux机器(Ubuntu 18.04.4 LTS)上运行容器时,它无法检索数据,尽管它可以连接到服务器。在超时设置的指定时间后,我收到:

原因:java。网SocketTimeoutException:读取在java上超时。网SocketInputStream。socketRead0(本机方法)~[?:?]在爪哇。网SocketInputStream。socketRead(SocketInputStream.java:115)~[?:?]在爪哇。网SocketInputStream。读(SocketInputStream.java:168)~[?:?]在爪哇。网SocketInputStream。阅读(SocketInputStream.java:140)~[?:?]在阳光下。尼奥。反恐精英。流解码器。readBytes(StreamDecoder.java:284)~[?:?]在阳光下。尼奥。反恐精英。流解码器。implRead(StreamDecoder.java:326)~[?:?]在阳光下。尼奥。反恐精英。流解码器。读(StreamDecoder.java:178)~[?:?]在爪哇。伊奥。输入流阅读器。read(InputStreamReader.java:185)~[?:?]在爪哇。伊奥。BufferedReader。填充(BufferedReader.java:161)~[?:?]在爪哇。伊奥。BufferedReader。readLine(BufferedReader.java:326)~[?:?]在爪哇。伊奥。BufferedReader。readLine(BufferedReader.java:392)~[?:?]在org。阿帕奇。平民网ftp。FTPFileEntryParserImpl。ReadNextery(FTPFileEntryParserImpl.java:53)~[app.jar:?]在org。阿帕奇。平民网ftp。FTPListParseEngine。readStream(FTPListParseEngine.java:142)~[app.jar:?]在org。阿帕奇。平民网ftp。FTPListParseEngine。readServerList(FTPListParseEngine.java:118)~[app.jar:?]在org。阿帕奇。平民网ftp。FTP客户。initiateListParsing(FTPClient.java:3450)~[app.jar:?]在org。阿帕奇。平民网ftp。FTP客户。initiateListParsing(FTPClient.java:3371)~[app.jar:?]在org。阿帕奇。平民网ftp。FTP客户。initiateListParsing(FTPClient.java:3308)~[app.jar:?]在org。我的组织。ftp。FtpOperator。listDirectory(FtpOperator.java:30)~[app.jar:?]

我想这不是防火墙的问题,因为我有类似的服务轮询外部服务器,它工作正常。两个服务都使用Apache FTP客户端库的本地被动模式。

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个答案

姜智渊
2023-03-14

在docker compose中将网络模式从网桥更改为主机,使容器能够通过FTPS/FTP列出文件

version: '2'
services:
  ingest:
    image: pl/ingest
    ports:
      - "8038:8038"
    volumes:
      - ./logs:/logs
      - ./processedFiles:/processedFiles
    network_mode: "host"
 类似资料:
  • 我试图使用System.net.ftpWebResponse连接到FTP服务器,但遇到了TLS问题; 如果我使用此配置: 我得到这个错误: 正确的配置是什么? ------更新我不知道它是否有任何相关性,但我尝试了一个工具来检查ftp服务器,我得到了这个;我真的不知道这些意味着什么 通过NPN+ALPN以外的套接字测试协议 您不应继续,因为未检测到任何协议。如果你真的真的想,说“YES”-->YE

  • 我们有一个ftp服务器,下面只有很少的目录和文件,我可以通过浏览器连接并成功访问目录。但是,当使用同一服务器时:具有凭据的端口无法连接。还尝试使用JSR233采样器列出文件,但没有成功。 请引导。 TestPlan:FTP请求默认值(服务器IP和端口:21) 对于FTP请求,获取如下错误:响应消息:java。木卫一。FileNotFoundException:(系统找不到指定的路径)请求正在进行:

  • 我正在docker中构建craft cms,当我执行docker compose up时,出现以下错误: 错误:对于craftcms无法开启服务craftcms: OCI运行时创建失败:container_linux.go:344:启动容器进程导致"process_linux.go:424:容器初始化导致\"rootfs_linux.go:58:安装\\"/host_mnt/c/src/compo

  • 问题内容: 尝试通过以下代码连接到 openfire 服务器时: 我得到一个异常说: 这可能是什么原因? 注意 :我已经允许openfire消防服务器通过防火墙。我也尝试过关闭防火墙,但是结果相同。服务器是我自己的机器。我尝试在其上运行程序的同一台计算机。 问题答案: 您可以使用 或者如果您想指定端口 或类似,默认为端口5222

  • 使用以下命令登录 ftp服务器: lftp ftp://用户名[:密码]@服务器地址[:端口] #标准方式,推荐 lftp 用户名[:密码]@服务器地址[:端口] lftp 服务器地址 [-p 端口] -u 用户名[,密码] lftp 服务器地址[:端口] -u 用户名[,密码] 如果不指定端口,默认 21 如果不在命令中使用明文输入密码,连接时会询问密码(推荐) 可以使用“书签”收藏服务器

  • 我正在使用木偶人刮一个网站,有一个任务在特定的时间执行。我需要读取服务器时钟,这是张贴在页面上。页面上的时钟是不断变化的,我需要能够读取它,所以只要它显示“7:00:00 AM”,我的功能就会触发(不是一毫秒之前,否则我需要访问的页面将不会加载)。我也不想在早上7点以后等一秒钟,否则我可能订不到我的预约。 下面是我需要阅读的元素的html。当您在控制台中查看时,时间(html文本)会闪烁并不断变化