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

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

传送门

查询到ftp的docker镜像

docker search vsftpd

我们选择第一个拉取

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的交互界面 

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。

直接使用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();
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值