一、准备工作
检查 Docker 环境
确保 Docker 已安装并运行:
bash
docker --version # 查看版本
systemctl status docker # 检查运行状态
清理旧容器(若有)
若之前安装过其他 FTP 容器,先卸载:
bash
停止并删除旧容器(替换为实际容器名)
docker stop ftp-with-webui && docker rm ftp-with-webui
(可选)删除旧镜像
docker rmi delfer/alpine-ftp-server
二、安装 Pure-FTPd
- 拉取官方镜像
bash
docker pull stilliard/pure-ftpd - 启动容器(基础配置)
bash
docker run -d
--name pure-ftpd
-p 21:21
-p 30000-30009:30000-30009
-v /home/ftp_data:/home/ftpusers \ # 宿主机目录映射(数据持久化)
-e "PUBLICHOST=服务器IP" \ # 替换为实际IP(如 192.168.1.100)
-e "FTP_USER_NAME=myuser" \ # 初始FTP用户名
-e "FTP_USER_PASS=mypassword" \ # 初始FTP密码
-e "FTP_USER_HOME=/home/ftpusers/myuser" \ # 初始用户目录
--restart=always
stilliard/pure-ftpd
参数说明:
-p 21:21:FTP 控制端口
-p 30000-30009:30000-30009:被动模式数据端口范围
-v /home/ftp_data:/home/ftpusers:宿主机目录与容器内目录映射(文件实际存在宿主机)
--restart=always:容器随 Docker 自动启动
三、用户管理(核心操作)
所有用户管理操作需在容器内执行,先进入容器:
bash
docker exec -it pure-ftpd sh
- 新增用户
bash
格式:pure-pw useradd 用户名 -u ftpuser -d /home/ftpusers/用户目录 -m
pure-pw useradd newuser -u ftpuser -d /home/ftpusers/newuser -m
执行后按提示输入密码
-m:自动创建目录并更新用户数据库
- 修改用户密码
bash
格式:pure-pw passwd 用户名 -m
pure-pw passwd myuser -m # 按提示输入新密码
- 修改用户目录
bash
1. 先创建新目录(容器内)
mkdir -p /home/ftpusers/new_dir
2. 修改用户路径
格式:pure-pw usermod 用户名 -d /新路径 -m
pure-pw usermod myuser -d /home/ftpusers/new_dir -m
- 删除用户
bash
格式:pure-pw userdel 用户名 -m
pure-pw userdel olduser -m
- 查看所有用户
bash
pure-pw list
四、验证服务
检查容器状态
bash
docker ps | grep pure-ftpd # 状态应为 Up
测试 FTP 连接
命令行测试:
bash
ftp 服务器IP 21 # 输入用户名和密码登录
客户端工具(如 FileZilla):
主机填服务器 IP,端口 21,输入用户名 / 密码连接
五、常见问题
连接失败:无法解析主机名
客户端直接用服务器 IP 连接,或在客户端 hosts 文件中绑定 IP 主机名。
被动模式无法传文件
确保宿主机防火墙开放 30000-30009 端口:
bash
ufw allow 30000:30009/tcp # 若使用 ufw 防火墙
文件权限问题
无需手动修改权限,pure-pw 会自动配置目录权限(属于 ftpuser 用户)。
六、数据持久化说明
所有 FTP 文件实际存储在宿主机的 /home/ftp_data 目录下,即使删除容器,文件也不会丢失。重新创建容器时保持 -v /home/ftp_data:/home/ftpusers 映射即可复用数据。