【Docker项目实战】使用Docker部署FTP服务器
【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简介FTPFile Transfer Protocol是一种用于在网络上传输文件的标准协议其核心特性是通过控制连接用于发送命令和响应默认端口21和数据连接用于传输文件数据实现文件传输。根据数据连接的建立方式FTP分为两种工作模式主动模式Active Mode和被动模式Passive Mode。1.2 FTP模式介绍1. 主动模式Active Mode工作原理客户端通过任意高端口1024连接服务器的21端口控制连接。客户端发送PORT命令告知服务器一个本地监听的高端口如50001。服务器从20端口主动连接客户端的指定端口50001建立数据连接进行文件传输。特点连接方向服务器主动发起数据连接到客户端。端口使用服务器固定使用20端口客户端使用随机高端口。防火墙限制客户端需开放高端口以接收服务器的连接否则防火墙可能拦截。安全性服务器暴露20端口客户端需开放动态端口安全性较低。适用场景客户端位于受信任的网络环境如局域网且防火墙允许服务器主动连接。服务器对客户端的访问权限有严格控制。2. 被动模式Passive Mode工作原理客户端通过任意高端口1024连接服务器的21端口控制连接。客户端发送PASV命令请求服务器进入被动模式。服务器随机分配一个高端口如50001并通过控制连接将该端口告知客户端。客户端主动连接服务器的指定端口50001建立数据连接进行文件传输。特点连接方向客户端主动发起所有连接。端口使用服务器和客户端均使用随机高端口1024。防火墙适配客户端主动连接服务器的高端口兼容防火墙和NAT环境。安全性服务器仅暴露控制端口21和被动端口范围客户端无需开放端口更安全。适用场景客户端位于防火墙或NAT后如公网用户访问内网服务器。服务器需支持大量客户端连接且防火墙策略复杂。3. 主动模式 vs. 被动模式特性主动模式被动模式数据连接发起方服务器客户端典型端口服务器20端口客户端随机高端口服务器和客户端均随机高端口防火墙兼容性需客户端开放高端口易被拦截客户端主动连接兼容性高安全性服务器暴露20端口风险较高客户端无需开放端口风险较低配置复杂度简单服务器固定端口需配置服务器的被动端口范围适用场景客户端与服务器在同一局域网客户端在防火墙/NAT后1.3 如何选择FTP模式主动模式适合服务器和客户端处于同一网络或客户端防火墙策略宽松的场景。被动模式适合客户端在防火墙/NAT后或服务器需支持大规模公网访问的场景。在实际应用中被动模式因兼容性和安全性优势更常用。若遇到连接问题需检查服务器是否配置了正确的被动端口范围如50000-60000。防火墙/路由器是否开放了服务器的被动端口范围。客户端是否禁用了防火墙或允许出站连接。二、本次实践规划2.1 本地环境规划本次实践为个人测试环境操作系统版本为 Ubuntu 24.04.2 LTS。hostnameIP地址操作系统版本Docker版本部署项目jeven01192.168.3.88Ubuntu 24.04.2 LTS28.3.3FTP2.2 本次实践介绍1.本次实践部署环境为个人测试环境生产环境请谨慎2.在Docker环境下部署FTP服务器。三、本地环境检查3.1 检查Docker服务状态检查Docker服务是否正常运行确保Docker正常运行。rootjeven:~# 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.service3.2 检查Docker版本检查Docker版本rootjeven:~# docker -vDocker version28.3.3, build 980b8563.3 检查docker compose 版本检查Docker compose版本确保2.0以上版本。rootjeven:~# docker -vDocker version28.3.3, build 980b856四、拉取FTP镜像下载拉FTP容器镜像如下所示dockerpull fauria/vsftpd五、部署FTP服务5.1 创建部署目录创建部署目录mkdir-p/data/ftp/datamkdir-p/data/ftp/log目录授权chmod-R755/data/ftp5.2 编辑部署文件使用docker-cli方式部署可参考以下命令dockerrun-d\--namevsftpd\--restartalways\-v/data/ftp/data/:/home/vsftpd\-v/data/ftp/log/:/var/log/vsftpd/\-p20:20-p21:21-p20000:20000\-eFTP_USERadmin\-eFTP_PASSadmin\-ePASV_MIN_PORT20000\-ePASV_MAX_PORT20000\-ePASV_ADDRESS192.168.3.88\-eLOG_STDOUT1\fauria/vsftpd在部署目录下创建docker-compose.yaml文件内容如下所示vimdocker-compose.yamlversion:3.9services:vsftpd:image:fauria/vsftpdenvironment:-LOG_STDOUT1-PASV_ADDRESS192.168.3.88-PASV_MAX_PORT20000-PASV_MIN_PORT20000-FTP_PASSadmin-FTP_USERadminports:-20000:20000-21:21-20:20volumes:-/data/ftp/log/:/var/log/vsftpd/-/data/ftp/data/:/home/vsftpdrestart:alwayscontainer_name:vsftpd5.3 创建FTP容器执行以下命令创建FTP容器。dockercompose up-d5.4 查看FTP容器状态检查FTP容器运行状态确保FTP容器正常启动。rootjeven:~# docker compose psWARN[0000]/root/docker-compose.yaml: the attributeversionis 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-y6.2 连接FTP服务器直接使用以下命令连接FTP服务端。输入设置的账号密码admin/admin即可连接成功。ftp192.168.3.886.3 测试上传上传文件!echohello ftpupload_test.txtput upload_test.txt下载文件ftplcd /tmp Local directory now: /tmp ftpget 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)ftpftpexit221Goodbye. rootjeven:~# ls /tmp/upload_test.txt/tmp/upload_test.txt rootjeven:~# 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服务具备了良好的可移植性和一致性便于在不同环境中快速复制和扩展。合理的数据卷挂载策略确保了用户文件的持久化存储有效避免了容器重启导致的数据丢失风险。整个过程体现了容器化技术在简化运维流程、提升系统可靠性方面的显著优势。

相关新闻

diagram-design:从结构化数据到代码化渲染的架构图画图方法论

diagram-design:从结构化数据到代码化渲染的架构图画图方法论

画图这件事,看起来是最没有技术含量的工作,但真正想画出一张让所有人一眼就懂的架构图、流程图、时序图,难度真不亚于写一份清晰的技术方案。diagram-design 就是我在反复踩坑之后总结出来的一套画图方法论加配套小工具:它把画图的…

2026/10/20 7:47:39 阅读更多 →
如何用DiarizationLM-Gemma-4-E4B-v1批量修正ASR转写的说话人错标:端到端工作流详解

如何用DiarizationLM-Gemma-4-E4B-v1批量修正ASR转写的说话人错标:端到端工作流详解

人工智能大模型语音微调模型量化 【免费下载链接】DiarizationLM-Gemma-4-E4B-v1 项目地址: https://ai.gitcode.com/hf_mirrors/google/DiarizationLM-Gemma-4-E4B-v1 点击查看 免费下载 做完 ASR(自动语音识别) 说话人分离后,转…

2026/10/20 9:13:52 阅读更多 →
STM32单片机 定时器 编码器接口

STM32单片机 定时器 编码器接口

编码器接口测速,用于电机控制Encoder Interface 编码器接口编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度每…

2026/10/19 6:46:59 阅读更多 →

最新新闻

大数据可视化模板实战:从选型、数据接入到问题排查

大数据可视化模板实战:从选型、数据接入到问题排查

简介:面向数据分析师、产品经理、市场运营及企业决策者的大数据可视化模板合集,包含近25套大屏统计模板,重点解决大屏场景下数据展示单调、图表类型缺失与响应式适配难等实际问题,支持业务监控、市场分析和运营报告等需求。压缩包…

2026/10/20 9:18:33 阅读更多 →
Agentic RAG、LLM Wiki与Multi-Agent:复杂RAG架构选型与落地实践

Agentic RAG、LLM Wiki与Multi-Agent:复杂RAG架构选型与落地实践

1. 从"能跑通"到"敢上线":复杂架构选型的真实分水岭做检索增强生成(RAG)系统的人,大概都经历过这样一个阶段:Demo 跑通了,效果看着还行,于是信心满满地准备往生产环境推。结…

2026/10/20 9:18:33 阅读更多 →
从38位AI关键人物访谈中,我总结了读行业趋势判断的7个反套路方法

从38位AI关键人物访谈中,我总结了读行业趋势判断的7个反套路方法

1. 为什么"38位关键人物"这个数字值得琢磨看到"38位中国AI关键人物"这个标题,我第一反应不是"哦又是一篇年度盘点",而是——为什么是38?这个数字背后其实藏着一套很讲究的筛选逻辑。做过行业访谈的人都知道&am…

2026/10/20 9:18:33 阅读更多 →
SpringBoot+Vue+MySQL船舶维保管理系统设计与实现

SpringBoot+Vue+MySQL船舶维保管理系统设计与实现

在工业信息化项目里摸爬滚打这几年,我最大的感受是:越是不起眼的传统行业,越需要一套真正能用、能落地的管理系统。船舶维保就是典型场景,主机、辅机、舵机、锚机、消防设备一堆,每一台都关系到航行安全,维…

2026/10/20 9:18:33 阅读更多 →
通用智能体系统架构设计与工程实践:从规划到记忆的完整拆解

通用智能体系统架构设计与工程实践:从规划到记忆的完整拆解

1. 通用智能体系统到底在解决什么问题第一次看到“通用智能体系统与生态架构”这个说法,很多人脑子里冒出来的可能是科幻电影里那种能自己思考、自己行动的机器人。但如果你真的在一线做过AI应用落地,就会知道事情远没有那么玄乎。所谓通用智能体&#x…

2026/10/20 9:18:33 阅读更多 →
智能家居Agent落地实践:OpenClaw技能编排与避坑指南

智能家居Agent落地实践:OpenClaw技能编排与避坑指南

1. 从一场产业园沙龙说起:智能家居Agent到底在解决什么问题前阵子参加了一场在智能家居产业园举办的社区沙龙,主题围绕智能体(Agent)在家庭场景里的落地展开。现场来了做硬件的、做云平台的、做语音交互的,还有几位专门…

2026/10/20 9:17:26 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →