我正在尝试使用 Apache 客户端连接从 docker 映像部署的 FTP 服务器:
import org.apache.commons.net.ftp.FTPClient
import java.io.IOException
object FtpClient {
def main(args: Array[String]): Unit = {
val ftpClient = new FTPClient()
try {
ftpClient.connect("localhost", 21)
val success = ftpClient.login("one", "1234")
if (success) {
println("Success connect")
}
} catch {
case e: IOException => throw new RuntimeException(e)
} finally {
//
}
}
}
FTP 服务器运行者:
docker run -d -p 21:21 -p 21000-21010:21000-21010 -e USERS="one|1234" -e ADDRESS=ftp.site.domain delfer/alpine-ftp-server
我收到以下错误:
Exception in thread "main" java.lang.RuntimeException: org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
at ru.spb.client.FtpClient$.main(FtpClient.scala:23)
at ru.spb.client.FtpClient.main(FtpClient.scala)
Caused by: org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
at org.apache.commons.net.ftp.FTP.getReply(FTP.java:568)
at org.apache.commons.net.ftp.FTP.getReply(FTP.java:556)
编辑:
Docker 日志返回:
Changing password for one
New password:
Bad password: too short
Retype password:
adduser: /ftp/one: No such file or directory
passwd: password for one changed by root
seems like pidfd_open syscall does not work, falling back to
polling
failed to watch for direct child exit (pidfd_open error): Operation not permitted
也许我错过了一些重要的连接设置?
FTP 容器-Docker 运行命令:
-e USERS="one|Passw0rd!"
, 密码1234
太短,请将密码更改为Passw0rd!
或其他密码-e ADDRESS=ftp.site.domain
,ftp.site.domain
是您的 ftp 服务器名称。编辑你的 /etc/hosts
添加
ftp.site.domain
127.0.0.1
快速替代方案
查找 ftp 容器 ID
如果容器 ID 是
05da9c08858f
打开到 ftp 容器
检查 ftp 服务是否正在运行?
在容器中,运行命令:
如果没有返回任何内容,则表示 ftp 服务未运行。
启动 ftp 服务
再次运行命令:
返回:(ftp 服务正在运行。)
退出容器:
笔记:
我没有花更多的时间去检查为什么docker run命令中没有默认启动ftp服务,所以我只是提供一个快速解决方案:进入Container并手动启动ftp服务。
您的测试应用程序
Ftp客户端.scala
ftp.site.domain
Passw0rd!
下载jar文件:
下载 commons-net-3.9.0.jar(https://repo1.maven.org/maven2/commons-net/commons-net/3.9.0/commons-net-3.9.0.jar)
检查版本
运行应用程序