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();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章