docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker部署FTP

使用Docker部署FTP服务器

作者:江湖有缘

本文详细介绍了使用Docker容器化技术部署FTP服务器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、FTP服务介绍

1.1 FTP简介

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

1.2 FTP模式介绍

1. 主动模式(Active Mode)

2. 被动模式(Passive Mode)

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

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

1.3 如何选择FTP模式?

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

  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 Mon 2025-08-04 10:10:52 UTC; 30min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 860 (dockerd)
      Tasks: 10
     Memory: 97.2M (peak: 98.4M)
        CPU: 606ms
     CGroup: /system.slice/docker.service

3.2 检查Docker版本

检查Docker版本

root@jeven:~# docker -v
Docker version 28.3.3, build 980b856

3.3 检查docker compose 版本

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

root@jeven:~# docker -v
Docker version 28.3.3, build 980b856

四、拉取FTP镜像

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

docker pull fauria/vsftpd

五、部署FTP服务

5.1 创建部署目录

mkdir -p /data/ftp/data  && mkdir -p /data/ftp/log  
chmod -R 755 /data/ftp

5.2 编辑部署文件

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

docker run -d \
--name vsftpd   \
--restart=always \
-v /data/ftp/data/:/home/vsftpd \
-v  /data/ftp/log/:/var/log/vsftpd/ \
-p 20:20 -p 21:21 -p 20000:20000 \
-e FTP_USER=admin \
-e FTP_PASS=admin \
-e PASV_MIN_PORT=20000 \
-e PASV_MAX_PORT=20000 \
-e PASV_ADDRESS=192.168.3.88 \
-e LOG_STDOUT=1 \
fauria/vsftpd

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

vim docker-compose.yaml
version: '3.9'
services:
    vsftpd:
        image: fauria/vsftpd
        environment:
            - LOG_STDOUT=1
            - PASV_ADDRESS=192.168.3.88
            - PASV_MAX_PORT=20000
            - PASV_MIN_PORT=20000
            - FTP_PASS=admin
            - FTP_USER=admin
        ports:
            - '20000:20000'
            - '21:21'
            - '20:20'
        volumes:
            - '/data/ftp/log/:/var/log/vsftpd/'
            - '/data/ftp/data/:/home/vsftpd'
        restart: always
        container_name: vsftpd

5.3 创建FTP容器

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

docker compose up -d

5.4 查看FTP容器状态

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

root@jeven:~# docker compose ps
WARN[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…"   vsftpd    50 seconds ago   Up 50 seconds   0.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客户端,执行以下命令:

apt  install ftp  -y

6.2 连接FTP服务器

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

ftp 192.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.txt
229 Entering Extended Passive Mode (|||20000|).
150 Opening BINARY mode data connection for upload_test.txt (10 bytes).
100% |************************************************************************************************|    10      180.84 KiB/s    00:00 ETA
226 Transfer complete.
10 bytes received in 00:00 (37.13 KiB/s)
ftp>
ftp> exit
221 Goodbye.
root@jeven:~# ls /tmp/upload_test.txt
/tmp/upload_test.txt
root@jeven:~# ls -l /tmp/upload_test.txt
-rw-r--r-- 1 root root 10  8月 14 15:08 /tmp/upload_test.txt

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

七、总结

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

到此这篇关于使用Docker部署FTP服务器的文章就介绍到这了,更多相关Docker部署FTP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文