【无标题】

一、准备工作

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

相关推荐
Patrick_Wilson1 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy2 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭2 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩3 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵3 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1113 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽4 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
武子康6 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn869 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
程序员老赵9 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops