启动命令:
docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 -v /opt/vsftpd/file:/home/vsftpd -e FTP_USER=admin -e FTP_PASS=1234 \
-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 -e PASV_ADDRESS=0.0.0.0 -e PASV_ENABLE=YES --name ftp \
--restart=always --privileged=true fauria/vsftpd
-d 后台启动容器
-p 20:20 将外部的20端口映射到内部的20端口
-p 21:21 将外部的21端口映射到内部的21端口
-p 21100-21110:21100-21110 将外部的 21100-21110端口映射到内部的21100-21110端口
-v /opt/vsftpd/file:/home/vsftpd 将本地磁盘的 /opt/vsftpd/file路径映射到内部的/home/vsftpd路径
-e FTP_USER=admin ftp的主用户
-e FTP_PASS=1234 ftp主用户的密码
-e PASV_MIN_PORT=21100 最小被动端口
-e PASV_MAX_PORT=21110 最大被动端口
-e PASV_ADDRESS=10.73.139.201 指定本机的ip
-e PASV_ENABLE=YES 启动被动模式
--name ftp 取一个名字,之后可以用(docker stop 名字 )来停止容器
--restart=always 开机自启动
--privileged=true 容器内用户获取root权限
fauria/vsftpd 仓库的镜像
创建用户:
# 1 进入docker ftp交互模式:
docker exec -i -t ftp bash
-i 连接容器的STDIN和容器外的STDIN
-t 告诉 docker 内部的主进程它的输入是终端设备
ftp 指定要进入的容器的名字(这个是在创建的时候使用–name指定的)
bash 使用bash作为终端
# 2 创建用户家目录并赋予权限:
mkdir /home/vsftpd/user1 && chown -R ftp.ftp /home/vsftpd/user1
mkdir /home/vsftpd/user2 && chown -R ftp.ftp /home/vsftpd/user2
# 3 将账号密码信息写入文件(注意:该命令在容器内执行, \n 是换行符)
echo -e "user1\nech" >> /etc/vsftpd/virtual_users.txt
echo -e "user2\nech" >> /etc/vsftpd/virtual_users.txt
# 4.使用脚本读取刚刚写入的文件(注意:该命令在容器内执行)
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
# 5.退出容器(注意:该命令在容器内执行)
exit
# 6.重启ftp
docker restart ftp
测试ftp状态:
[root@bj-121-240 ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): admin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (0,0,0,0,82,116).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir test
257 "/test" created
ftp> ls
227 Entering Passive Mode (0,0,0,0,82,108).
150 Here comes the directory listing.
drwx------ 2 ftp ftp 6 Apr 24 03:49 test
226 Directory send OK.
ftp> cd test
250 Directory successfully changed.
ftp> exit
保存镜像:
## 将改动过的把容器打包成镜像:
[root@bj-121-240 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dec06a8635f7 fauria/vsftpd "/usr/sbin/run-vsftp…" 31 minutes ago Up 21 minutes 0.0.0.0:20-21->20-21/tcp, 0.0.0.0:21100-21110->21100-21110/tcp ftp
[root@bj-121-240 ~]# docker commit dec06 ftp-ech
sha256:cc28d3be63adf17c5b14b3bc4b7e88c0a4dac1c9f4be2d846580f8335c85bd84
[root@bj-121-240 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ftp-ech latest cc28d3be63ad 5 seconds ago 394MB
fauria/vsftpd latest 9bfb39139661 2 months ago 394MB
## Docker images 导出:
docker save ftp-ech > ftp-ech.tar.gz # 第一种导出镜像
docker save ftp-ech -o /root/ftp-ech.tar.gz # 第二种导出镜像
## Docker images 导入:
docker load -i /root/ftp-ech.tar.gz # 导入镜像
## 用新的镜像启动容器:
docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 -v /opt/vsftpd/file:/home/vsftpd -e FTP_USER=admin -e FTP_PASS=1234 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 -e PASV_ADDRESS=0.0.0.0 -e PASV_ENABLE=YES --name ftp --restart=always --privileged=true ftp-ech
docker-compose.yaml
[root@bj-121-240 home]# cat docker-compose.yaml
version: '3'
services:
vsftpd:
image: ftp-ech
container_name: ftp
environment:
- FTP_USER=admin # 自定义用户名
- FTP_PASS=ech.com # 自定义用户密码
- PASV_ENABLE=YES
- PASV_ADDRESS=0.0.0.0 # 宿主机的IP
- PASV_MIN_PORT=21100
- PASV_MAX_PORT=21110
- ANON_ENABLE=NO
- privileged=true
volumes:
- /opt/vsftpd/file:/home/vsftpd # 将本地磁盘的 /opt/vsftpd/file路径映射到内部的/home/vsftpd路径
ports:
- "20:20"
- "21:21"
- "21100-21110:21100-21110"
restart: always