一行命令
- docker run -d \
- -v /share:/home/vsftpd \
- -p 20:20 \
- -p 21:21 \
- -p 21100-21110:21100-21110 \
- -e FTP_USER=zhaoolee \
- -e FTP_PASS=eelooahz \
- -e PASV_ADDRESS=47.106.108.135 \
- -e PASV_MIN_PORT=21100 \
- -e PASV_MAX_PORT=21100 \
- --name zhaoolee_vsftpd \
- --restart=always \
- fauria/vsftpd
参数解释:
-d 表示新建容器在后台运行
-v 表示设置目录映射 设置举例 -v /share:/home/vsftpd 将宿主机的 / share 目录映射到 docker 容器的 / home/vsftpd (用户 zhaoolee 登录后, 程序会在 / home/vsftpd 文件夹下, 自动新建一个 zhaoolee 文件夹, 用来存放上传的文件)
-p 为映射端口 -p 20:20 表示将宿主机 20 端口映射到 docker 容器的 20 端口,-p 21:21 表示将宿主机 21 端口映射到 docker 容器的 21 端口, -p 21100-21110:21100-21110 表示将宿主机的 21100 到 21110 端口映射到 docker 容器的 21100 到 21110 端口
与端口密切相关的是主动模式和被动模式两种连接方式
主动模式: 21 端口为 ftp 默认的端口, 是 ftp 的控制端口, 而 20 端口是 ftp 的数据端口, 21 端口用来接收客户端连接, 20 端口用来传输数据; 服务器 (主动地) 定下规矩, 客户端与服务端建立连接, 那通过 21 端口, 想传数据就通过 20 端口, 20 端口和 21 端口结合到一起就是 ftp 的主动模式
被动模式: 主动模式有一些安全性问题, 如果有人想攻击你的 ftp 服务, 就直接到 20 端口堵你, 为了避免数据出门被人堵, 就出现了被动模式, 被动模式把传数据的 20 端口, 改成了范围, 比如上文中的 21100-21110, 具体哪个值由客户端来定(比如 21115), 这样传出的数据就不容易被人堵, 安全性大大提升, 现在大多数 ftp 客户端, 默认使用被动模式连接服务器, 也就是由客户端定传数据的端口
-e 表示追加参数
FTP_USER 为 ftp 登录用户名, 设置示例 FTP_USER=zhaoolee
FTP_PASS 为 ftp 登录密码, 设置示例 FTP_PASS=eelooahz
PASV_ADDRESS 为外网 ip , 设置示例 PASV_ADDRESS=104.243.20.148 (非常重要: 这里一定要绑定宿主机对外的 ip, 否则后面会连不上, zhaoolee 在这里调了好久...)
PASV_MIN_PORT 为客户端连接服务器的最小端口号为 21100 (被动模式下服务端最小端口号)
PASV_MAX_PORT 为客户端连接服务器的最大端口号为 21110 (被动模式下服务端最大端口号)
--name zhaoolee_vsftpd 表示容器名为 zhaoolee_vsftpd(这个名字可以自定义)
--restart=always 表示 restart 可以
fauria/vsftpd 代表镜像名
用阿里云做个测试
开启 端口
20
, 端口
21
, 端口段 21100-21110
创建容器
连接测试(FillZilla 下载链接: https://filezilla-project.org/download.php?type=client)
通过 ftp 上传文件
小结:
ftp 是一个常用的服务, 这里使用 vsftp 的 docker 方式完成搭建, 一行命令搞定
docker 镜像 fauria/vsftpd 开源地址: https://github.com/fauria/docker-vsftpd, 可以找到详细的操作文档
来源: http://www.jianshu.com/p/1778dfb6f928