Ftp踩坑系列:
Linux上的ftp服务器 vsftpd 之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传
一、前言
出现这个问题,在docker这类容器出现之前,原因可能是防火墙的问题:
FTP服务器一般默认使用被动模式,即,客户端一般会和服务端的21端口建立连接,该连接用来传输命令。真正传输数据时,服务端会返回一个随机端口,告诉客户端新建连接去连接这个随机端口,来传输数据。
一般来说,这个随机端口,肯定是没在防火墙里配置的,所以会无法建立连接。
此时,直接先关掉防火墙即可。
二、docker场景下,该问题的解决方案
现在容器越发流行,基于docker构建各类服务显得更加方便。但是,一不注意,还是会踩坑的。
昨天,同事就是遇到这么个问题,说是能连上,但是涉及到数据就看不到,比如查看目录等。
一开始,也怀疑是防火墙的问题,于是直接把防火墙关了,发现问题依旧。
后来经过一番定位,发现是vsftpd是基于docker的,其启动docker容器的命令如下:
docker run -d -v /my/data/directory:/home/vsftpd -v /var/log/vsftpd/:/var/log/vsftpd/ -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=ROOT -e FTP_PASS=ROOT -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 -e PASV_ADDRESS=0.0.0.0 -e LOG_STDOUT=1 --name vsftpd --restart=always fauria/vsftpd
注意以上红色部门,指定了各类端口相关的配置。
为了快速查找问题,停止了旧的容器后,用下面的命令重新起了个容器,(直接改成了使用宿主机的网络):
docker run -d -v /my/data/directory:/home/vsftpd -v /var/log/vsftpd/:/var/log/vsftpd/ --network=host -e FTP_USER=ROOT -e FTP_PASS=ROOT -e LOG_STDOUT=1 --name vsftpd1.1 --restart=always fauria/vsftpd
进行了上述的修改后,问题解决了。
具体原因还需要查找,找到了再更新。
三、基于docker构建vsftpd容器,相关配置
其中,DockerFile:
FROM centos:7 MAINTAINER jason2019 RUN yum install -y vsftpd #RUN mkdir -p /data/ftp RUN useradd -d /data/ftp -s /bin/bash ROOT -p ROOT RUN echo "ROOT:ROOT