【无标题】

一、准备工作

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

相关推荐
qq_452396236 小时前
第十六篇:《Docker 安全基础:容器隔离与权限控制》
安全·docker·容器
Plastic garden6 小时前
Docker Compose 的 RuoYi nginx exporter Prometheus + Alertmanager + 钉钉告警
nginx·docker·prometheus
Jul1en_6 小时前
【Redis】Docker 部署集群补充说明
redis·docker·eureka
Irene199116 小时前
Win11 自动更新导致 Docker Desktop 无法正常启动,Oracle SQL Developer 启动时报错
docker·更新
darkdragonking19 小时前
OpenEuler 22.03 ,以docker ce 安装 Milvus 及可视化工具
docker·容器·milvus
我叫张土豆20 小时前
V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)
docker·语音识别·vllm
极客先躯1 天前
高级java每日一道面试题-2026年01月18日-实战篇[Docker]-如何清理仓库中的旧镜像?
java·运维·docker·容器
木雷坞1 天前
Docker Hub、GHCR、Quay 混在一起后,镜像源要分开测
运维·docker
qq_452396231 天前
第十五篇:《Docker 与 Kubernetes 集成:从 Swarm 到 K8s 的迁移》
docker·容器·kubernetes
lpfasd1231 天前
docker中默认网络的作用和注意事项
网络·docker·容器