這位老哥的安裝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();
}