【无标题】

一、准备工作

检查 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

  1. 拉取官方镜像
    bash
    docker pull stilliard/pure-ftpd
  2. 启动容器(基础配置)
    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

  1. 新增用户
    bash

格式:pure-pw useradd 用户名 -u ftpuser -d /home/ftpusers/用户目录 -m

pure-pw useradd newuser -u ftpuser -d /home/ftpusers/newuser -m

执行后按提示输入密码

-m:自动创建目录并更新用户数据库

  1. 修改用户密码

bash

格式:pure-pw passwd 用户名 -m

pure-pw passwd myuser -m # 按提示输入新密码

  1. 修改用户目录

bash

1. 先创建新目录(容器内)

mkdir -p /home/ftpusers/new_dir

2. 修改用户路径

格式:pure-pw usermod 用户名 -d /新路径 -m

pure-pw usermod myuser -d /home/ftpusers/new_dir -m

  1. 删除用户

bash

格式:pure-pw userdel 用户名 -m

pure-pw userdel olduser -m

  1. 查看所有用户

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 映射即可复用数据。

相关推荐
Dontla3 小时前
docker desktop入门(docker桌面版)(提示wsl版本太低解决办法)
运维·docker·容器
东风微鸣4 小时前
ArgoCD:我的GitOps探索之旅与未来展望
docker·云原生·kubernetes·可观察性
Adorable老犀牛10 小时前
DockerFile文件执行docker bulid自动构建镜像
运维·docker·容器
掘根12 小时前
【MySQL集群架构与实践5】使用Docker实现水平分片
mysql·docker·架构
潘多编程14 小时前
云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合
docker·云原生·kubernetes
sakoba14 小时前
Docker学习其二(容器卷,Docker网络,Compose)
运维·网络·学习·docker·容器·基础
喜欢板砖的牛马18 小时前
容器(docker container):你需要知道的一切
后端·docker
YuforiaCode20 小时前
24黑马SpringCloud的Docker本地目录挂载出现相关问题解决
spring cloud·docker·eureka
IvanCodes20 小时前
四、Portainer图形化管理实战与Docker镜像原理
docker·容器