sftp搭建,拉取镜像

1
docker pull docker.io/atmoz/sftp    //也可不拉取,在执行docker run命令时会自动拉取

持久化上传的文件

1
2
3
4
5
docker run --name sftp -v /opt/sftp:/home/admin/upload -p 23:22 -d atmoz/sftp admin:admin:::upload
--name sftp  容器名称
admin:admin:::upload  其中admin为用户名,admin为密码,upload为上传的文件会保存到容器里面的/home/admin/upload目录里面
-p 23:22  将宿主机的23端口映射到容器的22端口,这样方位宿主机的23端口则会转发到容器的22端口上
-d atmoz/sftp  使用dockup hub中的atmoz/sftp镜像创建容器
1
2
# 远程登录
sftp -P portNum user@sftpServerIP

ftp搭建,拉取镜像

1
docker pull fauria/vsftpd

查看端口占用

1
2
netstat  -anp  |grep 20
netstat -anp |grep 21

创建宿主机映射文件

1
2
cd /opt/
mkdir ftp

启动容器

1
2
3
4
5
6
docker run -d -v /opt/ftp:/home/vsftpd \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-e FTP_USER=账户 -e FTP_PASS=密码 \
-e PASV_ADDRESS=ip \
-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd
1
2
3
4
5
6
参数说明:
/opt/ftp:/home/vsftpd:映射 docker 容器 ftp 文件根目录(冒号前面是宿主机的目录)
-p:映射 docker 端口(冒号前面是宿主机的端口)
-e FTP_USER=xx -e FTP_PASS=xx :设置默认的用户名密码
PASV_ADDRESS:宿主机 ip,当需要使用被动模式时必须设置。
PASV_MIN_PORT~ PASV_MAX_PORT:给客服端提供下载服务随机端口号范围,默认 21100-21110,与前面的 docker 端口映射设置成一样。

防火墙配置

1
firewall-cmd --permanent --add-port=20/tcpfirewall-cmd --permanent --add-port=21/tcpfirewall-cmd --permanent --add-port=21100/tcpfirewall-cmd --permanent --add-port=21101/tcpfirewall-cmd --permanent --add-port=21102/tcpfirewall-cmd --permanent --add-port=21103/tcpfirewall-cmd --permanent --add-port=21104/tcpfirewall-cmd --permanent --add-port=21105/tcpfirewall-cmd --permanent --add-port=21106/tcpfirewall-cmd --permanent --add-port=21107/tcpfirewall-cmd --permanent --add-port=21108/tcpfirewall-cmd --permanent --add-port=21109/tcpfirewall-cmd --permanent --add-port=21110/tcpfirewall-cmd --reload

测试

1
1.cd /opt/ftpvi test.txt2. docker restart vsftpd

访问服务

ftp://账户:密码@ip

增加一个新用户

1
前面我们在启动服务的时候就创建了个默认用户 test。如果需要新增一个新用户,假设用户名:hangge,密码:123456,具体操作如下。 
  1. 首先执行如下命令进入到容器里面:
1
docker exec -i -t vsftpd bash
  1. 创建新用户的文件夹:
1
mkdir /home/vsftpd/hangge
  1. 编辑用户配置文件:
1
vi /etc/vsftpd/virtual_users.txt
  1. 在文件中添加新用户的用户名和密码:
  2. 保存退出后执行如下命令,把登录的验证信息写入数据库。
1
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
  1. 最后退出容器,并重启容器可以使用新用户连接 FTP 服务了。
1
2
exit
docker restart vsftpd

nginx

1
2
3
4
5
6
7
8
9
10
11
location /ftp {
alias /opt/ftp/xx/;
autoindex on; # 显示目录
autoindex_exact_size off; # 显示文件大小
#默认为on显示出文件的确切大小,单位是bytes
  #改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on; # 显示文件时间
#默认为off,显示的文件时间为GMT时间
#改为on后,显示的文件时间为文件的服务器时间
charset utf-8,gbk; #解决中文乱码问题
}