ftp分为主动模式(PORT)和被动模式(PASV)。主动模式使用20和21端口,其中20为数据端口,21为控制端口。被动模式使用21控制端口和一个其他随机端口作数据端口。主动模式因为防火墙的原因,经常会断掉,因此被动模式是通常情况下的优选。当宿主机端口紧张的时候,我们只需要(至少需要)两个端口作端口映射,即一个21控制端口;一个其他非公认数据端口。
前提:有docke环境后,可以开始搭建。
搜索一下别人封装好的 vsftpd (开源的ftp服务器)镜像。
# docker search vsftpd
然后根据需要选择镜像,一般都拉取使用量最高的镜像,这里是 fauria/vsftpd。
# docker pull fauria/vsftpd
等同于把安装包安装成可运行的软件,我们把拉取的 vsftp 镜像创建一个容器实例。在创建时需要指定一些运行参数。
# docker run -d \
-v /home/webapps:/home/vsftpd \
-v /var/log/vsftpd/:/var/log/vsftpd/ \
-p 20:20 -p 21:21 -p 20000:20000 \
-e FTP_USER=test \
-e FTP_PASS=test \
-e PASV_MIN_PORT=20000 \
-e PASV_MAX_PORT=20000 \
-e PASV_ADDRESS=宿主机ip地址 \
-e LOG_STDOUT=1 \
--name vsftpd --restart=always \
fauria/vsftpd
下面来解释一下:
1. -v /home/webapps:/home/vsftpd
这句话是将宿主机的 /home/webapps 文件夹和容器的 /home/vsftpd 文件夹作一个映射,之后容器中上传的东西都可以在 /home/webapps 中看到。
2. -p 20:20 -p 21:21 -p 21100-21110:21100-21110
这句话就是原理中的端口映射了,冒号前是宿主机暴露的端口,冒号后是容器实例启动的端口。补充一点是,要映射21端口才能访问ftp,映射20端口才能查看到文件。、
3. -e FTP_USR and FTP_PASS
设置初始的ftp用户和密码
4. PASV_ADDRESS=X.X.X.X
这里需要填写宿主机的ip地址
5. PASV_MIN_PORT和PASV_MAX_PORT都设置成一样的
此时就仅开放一个端口作为数据端口了
容器运行起来之后就可以登录测试了。
当然如果是公有云服务器,需要在安全组规则开启上面用到的端口
除了安全组规则开放之外,一般服务器还会设置得有 firewalld 规则,所以需要服务器开启端口。
# firewall-cmd --zone=public --add-port=20/tcp --permanent
# firewall-cmd --zone=public --add-port=21/tcp --permanent
# firewall-cmd --permanent --zone=public --add-port=20000/tcp
# firewall-cmd --reload
在创建容器时我们设置了ftp的用户和密码,我们还可以增加用户,用户信息保存在 /etc/vsftpd/virtual_users.txt 这个文件中。当然这个文件在容器内部,我们需要进入容器。
先看一下容器是否正常启动
# docker ps
能够看到启动的容器,我们进入容器查看用户
# docker exec -it vsftpd /bin/bash
# vi /etc/vsftpd/virtual_users.txt
可以看到我们指定的用户和密码都在这个文件中,在文件中添加新用户的用户名和密码:奇数为帐号,奇数相邻的偶数为密码。创建容器时未设置用户名和密码,系统会默认创建用户和随机密码。
帐号和目录是对应的,每个账号对应一个用户目录,所以我们需要在/home下创建一个与账号同名的目录。
# mkdir /home/vsftpd/<username>
hash处理登录的验证信息并写入数据库
# /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
用户密码都配置完之后,我们需要重启一下容器,让配置生效。退出容器
# exit
# docker restart vsftpd
然后我们可以访问验证了
linux 访问
# yum install -y ftp
# ftp <ip>
输入用户名
输入密码
登录成功
ftp> ls 查看文件
windows 访问
1、在浏览器中访问:ftp://
更多可参照:https://www.jianshu.com/p/c84f6e6de002