如何在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等软件登录上去了。

posted @ 2021-08-31 23:59  思念殇千寻  阅读(2917)  评论(0编辑  收藏  举报