如何在docker容器中搭建ftp服務


  參考資料:

  https://www.cnblogs.com/Eric-Hwang/articles/4244287.html

  https://github.com/fauria/docker-vsftpd

  https://www.cnblogs.com/jbxie/p/12092293.html

  光看上面三個參考資料而不知道原理,你是沒辦法在docker容器中成功把ftp服務起起來的。

  首先是原理部分,ftp分為主動模式和被動模式。主動模式使用20和21端口,其中20為數據端口,21為控制端口。被動模式使用21控制端口和一個其他隨機端口作數據端口。主動模式因為防火牆的原因,經常會斷掉,因此被動模式是通常情況下的優選。當宿主機端口緊張的時候,我們只需要(至少需要)兩個端口作端口映射,即一個21控制端口(例子中使用45009);一個其他非公認數據端口(例子中使用45010)。

  知道了原理,我們拉一個別人封裝好的vsftpd(開源ftp服務器)鏡像即可很快地部署ftp。

docker pull fauria/vsftpd

  什么?你已經有了一個容器,不想重新使用別人的鏡像。那么你也只需要使用apt-get install vsftpd命令即可自己去起vsftpd服務。只是這個搭建的過程會踩一些坑,比如vsftpd啟動腳本的bug,配置文件等。搜索引擎會幫到你。

  下面還是專注於vsftpd docker。

  我們有了一個docker,下面就只需要按照參考資料中的命令來做即可。具體命令如下:

docker run -d -v /data/ftp:/home/vsftpd -p 45009:21 -p 45010:45010 -e FTP_USER=ftpuser -e FTP_PASS=654321 -e PASV_ADDRESS=XX.XX.XX.XX -e PASV_MIN_PORT=45010 -e PASV_MAX_PORT=45010 --name ftpserver --restart=always fauria/vsftpd

  下面解釋一下:

  1. -v /data/ftp:/home/vsftpd

  這句話是將宿主機的/data/ftp文件夾和容器的home文件夾作一個映射,之后容器中上傳的東西都可以在/data/ftp中看到。

  2. -p 45009:21 -p 45010:45010

  這句話就是原理部分的端口映射了

  3. -e FTP_USR and FTP_PASS

  設置初始的ftp用戶和密碼

  4. PASV_ADDRESS=XXX

  設置宿主機的ip地址即可。這個我的理解就是服務器不知道自己的外部ip,要顯式地指定,這樣在S to C交換信息的時候才不會出錯。

  5. PASV_MIN_PORT和PASV_MAX_PORT都設置成一樣的

  此時就僅開放一個端口作為數據端口了

  容器運行起來之后就可以使用filezilla等軟件登錄上去了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM