最近公司因为使用fastdfs做文件存储,但因为项目需要,需要使用FTP的方式访问fastdfs对应的文件。由此想到的解决方案为两者均挂载同一文件目录。
1.首先下载vsftpd镜像
docker pull fauria/vsftpd
2.运行镜像并将文件目录挂载至fastdfs存储目录
设置的fastdfs文件实际存储目录: /var/fastdfs/storage/data
docker run -p 55508:20 -p 55509:21 -p 55540-55550:55540-55550 \
-e FTP_USER=test -e FTP_PASS=test \
-e PASV_ADDRESS=宿主机外网IP \
-e PASV_MIN_PORT=55540 -e PASV_MAX_PORT=55550 \
-v /var/fastdfs/storage/data:/home/vsftpd/admin/ \
--name vsftpd --privileged=true --restart=always fauria/vsftpd
参数解读:
- /var/fastdfs/storage/data:/home/vsftpd:映射 docker 容器 ftp 文件根目录(冒号前面是宿主机的目录)
- -p:映射 docker 端口(冒号前面是宿主机的端口)
- -e FTP_USER=test -e FTP_PASS=test :设置默认的用户名密码(都为 test)
- PASV_ADDRESS:宿主机外网 ip,当需要使用被动模式时必须设置。
- PASV_MIN_PORT~ PASV_MAX_PORT:给客户端提供下载服务随机端口号范围,默认 55540-55550,与前面的 docker 端口映射设置成一样。
由于fauria/vsftpd的编排文件中有问题,故而以上的运行不能快速启动使用,原因是挂载了宿主机的目录后,由于宿主机对应目录已存在较多文件,从而引发vsftpd中授权文件多而不能快速启用
解决方案:
1.关闭针对/home/vsftpd/的权限管理
进入:vsftpd内部
docker exec -it vsftpd /bin/sh
找到run-vsftpd.sh文件,默认文件目录:/usr/sbin/run-vsftpd.sh
vi /usr/sbin/run-vsftpd.sh
注释:chown -R ftp:ftp /home/vsftpd/
由于连接比较缓慢存在缓存,调整期参数,添加以下代码:
sed -i "/reverse_lookup_enable/d" /etc/vsftpd/vsftpd.conf
echo "reverse_lookup_enable=NO" >> /etc/vsftpd/vsftpd.conf
保存文件后直接在docker中运行:/usr/sbin/run-vsftpd.sh
sh /usr/sbin/run-vsftpd.sh