使用 Docker 搭建 FTP 服務,不僅十分簡單,而且可以對宿主機有一定的隔離。下面以Ubuntu系統為例,演示如何通過容器運行 FTP 服務。
1,拉取鏡像
首先執行如下命令將鏡像下載到本地:
docker pull fauria/vsftpd
2,啟動容器
執行如下命令實例化 ftp 服務:
參數說明:
/Ftpfile:/home/vsftpd:映射 docker 容器 ftp 文件根目錄(冒號前面是宿主機的目錄)
-p:映射 docker 端口(冒號前面是宿主機的端口)
-e FTP_USER=test -e FTP_PASS=test :設置默認的用戶名密碼(都為 test)
PASV_ADDRESS:宿主機 ip,當需要使用被動模式時必須設置。
PASV_MIN_PORT~ PASV_MAX_PORT:給客服端提供下載服務隨機端口號范圍,默認 21100-21110,與前面的 docker 端口映射設置成一樣。
sudo docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 \
-v /Ftpfile:/home/vsftpd -e FTP_USER=root -e FTP_PASS=root \
-e PASV_ADDRESS=10.170.66.129 \
-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name ftpserver --restart=always fauria/vsftpd
3,防火牆配置
如果Ubuntu服務器有防火牆,為了讓客戶端能夠訪問 ftp 服務。我們可以關閉防火牆,或者執行如下命令配置 firewall 防火牆策略:
firewall-cmd --permanent --add-port=20/tcp firewall-cmd --permanent --add-port=21/tcp firewall-cmd --permanent --add-port=21100/tcp firewall-cmd --permanent --add-port=21101/tcp firewall-cmd --permanent --add-port=21102/tcp firewall-cmd --permanent --add-port=21103/tcp firewall-cmd --permanent --add-port=21104/tcp firewall-cmd --permanent --add-port=21105/tcp firewall-cmd --permanent --add-port=21106/tcp firewall-cmd --permanent --add-port=21107/tcp firewall-cmd --permanent --add-port=21108/tcp firewall-cmd --permanent --add-port=21109/tcp firewall-cmd --permanent --add-port=21110/tcp firewall-cmd --reload
4,新建用戶文件夾
(1)首先執行如下命令進入到容器里面:
docker exec -i -t ftpserver bash
(2)由於前面我們啟動的時候設置用戶名為root,已經自動創建對應的用戶文件夾(所以下面這個文件夾無需我們再次手動創建):
mkdir /home/vsftpd/root
(3)為方便演示,在 test 用戶文件夾下新建一個 1.txt 文件:
vi /home/vsftpd/test/1.txt
5,訪問服務
(1)我們可以直接使用瀏覽器進行訪問,地址如下:
(2)也可以使用 ftp 客戶端工具進行訪問。
(3)如果是 Mac 電腦,我們還可以通過“訪達”->“前往”->“連接服務器...”來訪問 ftp 服務。
附:增加一個新用戶
前面我們在啟動服務的時候就創建了個默認用戶root。如果需要新增一個新用戶,假設用戶名:hangge,密碼:123456,具體操作如下。
(1)首先執行如下命令進入到容器里面:
docker exec -i -t ftpserver bash
(2)創建新用戶的文件夾:
mkdir /home/vsftpd/hangge
(3)編輯用戶配置文件:
vi /etc/vsftpd/virtual_users.txt
(4)在文件中添加新用戶的用戶名和密碼:
(5)保存退出后執行如下命令,把登錄的驗證信息寫入數據庫。
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
chown -R ftp:ftp /home/vsftpd
(6)最后退出容器,並重啟容器可以使用新用戶連接 FTP 服務了。
exit docker restart vsftpd
