Estou tentando conectar ao servidor FTP, implantado a partir da imagem do Docker, usando o cliente Apache:
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 {
//
}
}
}
Servidor FTP executado por:
docker run -d -p 21:21 -p 21000-21010:21000-21010 -e USERS="one|1234" -e ADDRESS=ftp.site.domain delfer/alpine-ftp-server
E recebo o seguinte erro:
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)
EDITAR:
Os logs do Docker retornam:
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
Talvez eu tenha esquecido alguma configuração de conexão importante?
Contêiner FTP - Comando de execução do Docker:
-e USERS="one|Passw0rd!"
, A senha1234
é muito curta, então altere a senha paraPassw0rd!
ou outras-e ADDRESS=ftp.site.domain
,ftp.site.domain
é o nome do seu servidor ftp.edite seu /etc/hosts
adicionar
ftp.site.domain
à127.0.0.1
Uma alternativa rápida
encontrar id do contêiner ftp
se o ID do contêiner for
05da9c08858f
abrir em contêiner ftp
Verifique se o serviço ftp está em execução?
no contêiner, execute o comando:
se não retornar nada, o serviço ftp não está em execução.
iniciar serviço ftp
execute o comando novamente:
return: (o serviço ftp está em execução.)
recipiente de saída:
Observação:
Não perdi mais tempo verificando por que o serviço ftp não foi iniciado por padrão no comando docker run, então apenas forneci uma solução rápida: entre no Container e inicie o serviço ftp manualmente.
Seu aplicativo de teste
FtpClient.scala
ftp.site.domain
Passw0rd!
Baixar arquivo jar:
Baixar commons-net-3.9.0.jar( https://repo1.maven.org/maven2/commons-net/commons-net/3.9.0/commons-net-3.9.0.jar )
Verificar versão
Executar aplicativo