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