docker中创建ftp服务器并使用kettle读取

这位老哥的安装ftp已经写得很详细了,借用他的部分文章

传送门

查询到ftp的docker镜像

docker search vsftpd

docker中创建ftp服务器并使用kettle读取_第1张图片

我们选择第一个拉取

docker pull fauria/vsftpd 

然后执行如下命令 

docker run -d -v /app/ftp:/home/vsftpd \
> -p 20:20 -p 21:21 -p  21100-21110:21100-21110 \
> -e FTP_USER=test -e FTP_PASS=test \
> -e PASV_ADDRESS=10.150.22.222 \
> -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
> --name vsftpd --restart=always fauria/vsftpd

该命令对应的参数说明如下,这里需要指定一个宿主机目录。此时上传的文件实际存放在宿主机目录下,如果目录存不存在,会创建。如果不指定,会生成一个临时目录。

docker中创建ftp服务器并使用kettle读取_第2张图片

进入docker容器中打开ftp的交互界面 

docker exec -it vsftpd bash

如果要创建新用户的话,就在/home/vsftpd/下创建新目录。目录名同用户名一致。

编辑如下文件分两行分别写上用户名和密码。奇数行是用户名,偶数行是密码。

	
vi /etc/vsftpd/virtual_users.txt

然后执行如下语句即可

/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

然后重启ftp

docker restart vsftpd

可以用FileZilla,也可以用Xshell。还可以用cmd,这里介绍一下cmd。

docker中创建ftp服务器并使用kettle读取_第3张图片

直接使用ftp连接。然后输入用户密码 。可以用put上传文件。用get下载文件。至此。就可以正常使用ftp传输文件了.

在如上继承关系的插件类中,在重写的init方法中进行连接ftp的操作

ftpClient = new FTPClient();
ftpClient.connect(ip, port);
ftpClient.login(pluginMeta.getUserName(), pluginMeta.getPassword());
ftpClient.setControlEncoding("utf-8");
// 切换到指定目录下
ftpClient.changeWorkingDirectory(pluginMeta.getDirectory());

 

然后再重写的ProcessRow方法中进行文件的操作

这里特别要注意,在使用ftp进行文件操作的时候。必须先关闭流。不然在循环中,第二次读取时会报空指针

inputStreams.close();
ftpClient.completePendingCommand();

最后在重写的dispose方法中关闭连接

if (ftpClient != null) {
	ftpClient.disconnect();
}

 

你可能感兴趣的:(springboot框架)