vsftpd@容器运行pure-ftpd

stilliard/pure-ftpd 是一个基于 Pure-FTPd 的轻量级 Docker 镜像,适用于在容器中快速部署 FTP 服务器。该镜像由 Andrew Stilliard 维护,旨在提供一个安全、易于配置的 FTP 服务,特别适合与其他容器(如 WordPress、PrestaShop 等)共享数据卷的场景。


🧰 核心功能

  • 基于 Pure-FTPd:使用 Pure-FTPd 作为 FTP 服务核心,支持虚拟用户、TLS 加密等功能。

  • 多种标签(Tags):提供多个标签以满足不同需求,如 latesthardened(强化安全配置)、jessie-latest 等。

  • 环境变量配置:通过设置环境变量(如 FTP_USER_NAMEFTP_USER_PASSFTP_USER_HOME)即可快速添加 FTP 用户。

  • 被动模式支持:默认开放 30000–30009 端口范围,支持 FTP 被动模式连接。

  • TLS 加密:支持通过设置 ADDED_FLAGS="--tls=2" 启用 TLS 加密传输。


🚀 快速启动示例

以下命令将启动一个名为 ftpd_server 的容器,并配置 FTP 用户:

1
2
3
4
5
6
7
docker run -d --name ftpd_server \
-p 21:21 -p 30000-30009:30000-30009 \
-e FTP_USER_NAME=bob \
-e FTP_USER_PASS=secret \
-e FTP_USER_HOME=/home/ftpusers/bob \
-e PUBLICHOST=localhost \
stilliard/pure-ftpd:hardened

这将创建一个用户名为 bob、密码为 secret 的 FTP 用户,其主目录为 /home/ftpusers/bob

1
2
3
4
5
6
7
8
9
10
docker run -d \
--name pure-ftpd \
-p 21:21 \
-p 30000-30009:30000-30009 \
-e PUBLICHOST=127.0.0.1 \ # 你的主机公网 IP 或域名
-e FTP_USER_NAME=ftpuser \
-e FTP_USER_PASS=ftppass \
-e FTP_USER_HOME=/home/ftpusers/ftpuser \
-v ~/ftpdata:/home/ftpusers/ftpuser \
stilliard/pure-ftpd:hardened
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
ftp:
image: stilliard/pure-ftpd:hardened
container_name: pure-ftpd
ports:
- "21:21"
- "30000-30009:30000-30009"
environment:
PUBLICHOST: 127.0.0.1
FTP_USER_NAME: ftpuser
FTP_USER_PASS: ftppass
FTP_USER_HOME: /home/ftpusers/ftpuser
volumes:
- ./ftpdata:/home/ftpusers/ftpuser
restart: always

🔧 常用配置选项

  • **PUBLICHOST**:设置被动模式下的公共主机名或 IP 地址。
  • **ADDED_FLAGS**:添加额外的 Pure-FTPd 启动参数,例如启用 TLS:--tls=2
  • **FTP_USER_UIDFTP_USER_GID**:设置 FTP 用户的 UID 和 GID,确保与挂载卷的权限匹配。

📁 与其他容器共享数据卷

可将此镜像与其他容器(如 WordPress)共享数据卷,实现文件的上传和管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
services:
wordpress:
image: wordpress
volumes:
- wp_data:/var/www/html

ftp:
image: stilliard/pure-ftpd:hardened
ports:
- "21:21"
- "30000-30009:30000-30009"
environment:
FTP_USER_NAME: "ftpuser"
FTP_USER_PASS: "ftppass"
FTP_USER_HOME: "/var/www/html"
FTP_USER_UID: 33
FTP_USER_GID: 33
volumes:
- wp_data:/var/www/html

volumes:
wp_data:

在上述配置中,FTP 用户的 UID 和 GID 设置为 33,以匹配 WordPress 容器中 www-data 用户的权限,从而避免权限问题。


🔒 安全建议

  • 使用强化标签:建议使用 hardened 标签,以获得更安全的默认配置。
  • 启用 TLS:通过设置 ADDED_FLAGS="--tls=2" 启用 TLS 加密,确保数据传输的安全性。
  • 限制连接数:可通过设置 MAX_CONNECTIONS 环境变量限制最大连接数,例如 MAX_CONNECTIONS=20

验证连接

ftp 127.0.0.1
用户名:ftpuser
密码:ftppass
或使用 lftp:

lftp -u ftpuser,ftppass ftp://127.0.0.1