☰
【Docker项目实战】使用Docker部署FTP服务器
2026/10/19 6:47:40 网站建设 项目流程

【Docker项目实战】使用Docker部署FTP服务器

  • 一、FTP服务介绍
    • 1.1 FTP简介
    • 1.2 FTP模式介绍
    • 1.3 如何选择FTP模式?
  • 二、本次实践规划
    • 2.1 本地环境规划
    • 2.2 本次实践介绍
  • 三、本地环境检查
    • 3.1 检查Docker服务状态
    • 3.2 检查Docker版本
    • 3.3 检查docker compose 版本
  • 四、拉取FTP镜像
  • 五、部署FTP服务
    • 5.1 创建部署目录
    • 5.2 编辑部署文件
    • 5.3 创建FTP容器
    • 5.4 查看FTP容器状态
  • 六、连接FTP服务器
    • 6.1 安装FTP客户端
    • 6.2 连接FTP服务器
    • 6.3 测试上传
  • 七、总结

一、FTP服务介绍

1.1 FTP简介

FTP(File Transfer Protocol)是一种用于在网络上传输文件的标准协议,其核心特性是通过控制连接(用于发送命令和响应,默认端口21)和数据连接(用于传输文件数据)实现文件传输。根据数据连接的建立方式,FTP分为两种工作模式:主动模式(Active Mode)和被动模式(Passive Mode)。

1.2 FTP模式介绍

1. 主动模式(Active Mode)

  • 工作原理:

    1. 客户端通过任意高端口(>1024)连接服务器的21端口(控制连接)。
    2. 客户端发送PORT命令,告知服务器一个本地监听的高端口(如50001)。
    3. 服务器从20端口主动连接客户端的指定端口(50001),建立数据连接进行文件传输。
  • 特点:

    • 连接方向:服务器主动发起数据连接到客户端。
    • 端口使用:服务器固定使用20端口,客户端使用随机高端口。
    • 防火墙限制:客户端需开放高端口以接收服务器的连接,否则防火墙可能拦截。
    • 安全性:服务器暴露20端口,客户端需开放动态端口,安全性较低。
  • 适用场景:

    • 客户端位于受信任的网络环境(如局域网),且防火墙允许服务器主动连接。
    • 服务器对客户端的访问权限有严格控制。

2. 被动模式(Passive Mode)

  • 工作原理:

    1. 客户端通过任意高端口(>1024)连接服务器的21端口(控制连接)。
    2. 客户端发送PASV命令,请求服务器进入被动模式。
    3. 服务器随机分配一个高端口(如50001),并通过控制连接将该端口告知客户端。
    4. 客户端主动连接服务器的指定端口(50001),建立数据连接进行文件传输。
  • 特点:

    • 连接方向:客户端主动发起所有连接。
    • 端口使用:服务器和客户端均使用随机高端口(>1024)。
    • 防火墙适配:客户端主动连接服务器的高端口,兼容防火墙和NAT环境。
    • 安全性:服务器仅暴露控制端口(21)和被动端口范围,客户端无需开放端口,更安全。
  • 适用场景:

    • 客户端位于防火墙或NAT后(如公网用户访问内网服务器)。
    • 服务器需支持大量客户端连接,且防火墙策略复杂。

3. 主动模式 vs. 被动模式

特性主动模式被动模式
数据连接发起方服务器客户端
典型端口服务器20端口,客户端随机高端口服务器和客户端均随机高端口
防火墙兼容性需客户端开放高端口,易被拦截客户端主动连接,兼容性高
安全性服务器暴露20端口,风险较高客户端无需开放端口,风险较低
配置复杂度简单(服务器固定端口)需配置服务器的被动端口范围
适用场景客户端与服务器在同一局域网客户端在防火墙/NAT后

1.3 如何选择FTP模式?

  • 主动模式:适合服务器和客户端处于同一网络或客户端防火墙策略宽松的场景。
  • 被动模式:适合客户端在防火墙/NAT后,或服务器需支持大规模公网访问的场景。

在实际应用中,被动模式因兼容性和安全性优势更常用。若遇到连接问题,需检查:

  1. 服务器是否配置了正确的被动端口范围(如50000-60000)。
  2. 防火墙/路由器是否开放了服务器的被动端口范围。
  3. 客户端是否禁用了防火墙或允许出站连接。

二、本次实践规划

2.1 本地环境规划

本次实践为个人测试环境,操作系统版本为 Ubuntu 24.04.2 LTS。

hostnameIP地址操作系统版本Docker版本部署项目
jeven01192.168.3.88Ubuntu 24.04.2 LTS28.3.3FTP

2.2 本次实践介绍

1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.在Docker环境下部署FTP服务器。

三、本地环境检查

3.1 检查Docker服务状态

检查Docker服务是否正常运行,确保Docker正常运行。

root@jeven:~# systemctl status docker● docker.service - Docker Application Container Engine Loaded: loaded(/usr/lib/systemd/system/docker.service;enabled;preset: enabled)Active: active(running)since Mon2025-08-0410:10:52 UTC;30min ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID:860(dockerd)Tasks:10Memory:97.2M(peak:98.4M)CPU: 606ms CGroup: /system.slice/docker.service

3.2 检查Docker版本

检查Docker版本

root@jeven:~# docker -vDocker version28.3.3, build 980b856

3.3 检查docker compose 版本

检查Docker compose版本,确保2.0以上版本。

root@jeven:~# docker -vDocker version28.3.3, build 980b856

四、拉取FTP镜像

下载拉FTP容器镜像,如下所示

dockerpull fauria/vsftpd

五、部署FTP服务

5.1 创建部署目录

  • 创建部署目录
mkdir-p/data/ftp/data&&mkdir-p/data/ftp/log
  • 目录授权
chmod-R755/data/ftp

5.2 编辑部署文件

使用docker-cli方式部署,可参考以下命令:

dockerrun-d\--namevsftpd\--restart=always\-v/data/ftp/data/:/home/vsftpd\-v/data/ftp/log/:/var/log/vsftpd/\-p20:20-p21:21-p20000:20000\-eFTP_USER=admin\-eFTP_PASS=admin\-ePASV_MIN_PORT=20000\-ePASV_MAX_PORT=20000\-ePASV_ADDRESS=192.168.3.88\-eLOG_STDOUT=1\fauria/vsftpd

在部署目录下,创建docker-compose.yaml文件,内容如下所示:

vimdocker-compose.yaml
version:'3.9'services:vsftpd:image:fauria/vsftpdenvironment:-LOG_STDOUT=1-PASV_ADDRESS=192.168.3.88-PASV_MAX_PORT=20000-PASV_MIN_PORT=20000-FTP_PASS=admin-FTP_USER=adminports:-'20000:20000'-'21:21'-'20:20'volumes:-'/data/ftp/log/:/var/log/vsftpd/'-'/data/ftp/data/:/home/vsftpd'restart:alwayscontainer_name:vsftpd

5.3 创建FTP容器

执行以下命令,创建FTP容器。

dockercompose up-d

5.4 查看FTP容器状态

检查FTP容器运行状态,确保FTP容器正常启动。

root@jeven:~# docker compose psWARN[0000]/root/docker-compose.yaml: the attribute`version`is obsolete, it will be ignored, please remove it to avoid potential confusion NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS vsftpd fauria/vsftpd"/usr/sbin/run-vsftp…"vsftpd50seconds ago Up50seconds0.0.0.0:20-21->20-21/tcp,[::]:20-21->20-21/tcp,0.0.0.0:20000->20000/tcp,[::]:20000->20000/tcp

六、连接FTP服务器

6.1 安装FTP客户端

在宿主机上安装FTP客户端,执行以下命令:

aptinstallftp-y

6.2 连接FTP服务器

直接使用以下命令,连接FTP服务端。输入设置的账号密码admin/admin,即可连接成功。

ftp192.168.3.88

6.3 测试上传

  • 上传文件
!echo"hello ftp">upload_test.txt
put upload_test.txt

  • 下载文件
ftp>lcd /tmp Local directory now: /tmp ftp>get upload_test.txt local: upload_test.txt remote: upload_test.txt229Entering Extended Passive Mode(|||20000|).150Opening BINARY mode data connectionforupload_test.txt(10bytes).100%|************************************************************************************************|10180.84KiB/s 00:00 ETA226Transfer complete.10bytes receivedin00:00(37.13KiB/s)ftp>ftp>exit221Goodbye. root@jeven:~# ls /tmp/upload_test.txt/tmp/upload_test.txt root@jeven:~# ls -l /tmp/upload_test.txt-rw-r--r--1root root108月1415:08 /tmp/upload_test.txt

在本地浏览器也可以连接FTP服务器,输入地址:ftp://192.168.3.88 ,如下所示:


七、总结

通过本次Docker部署FTP服务器的实战,我们高效实现了服务的快速搭建与环境隔离,显著提升了部署的灵活性与可重复性。利用Docker容器化技术,FTP服务具备了良好的可移植性和一致性,便于在不同环境中快速复制和扩展。合理的数据卷挂载策略确保了用户文件的持久化存储,有效避免了容器重启导致的数据丢失风险。整个过程体现了容器化技术在简化运维流程、提升系统可靠性方面的显著优势。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询