docker FTP服务器搭建与排坑

 在使用FTP时,如果客户端机器和FTP服务器双方之间的所有端口都是开放的,那连接不存在问题。如果客户端与服务器之间有防火墙,如果没配置好防火策略和采用合适的连接模式,会导致登录成功,但无法List列表的问题。要避免出现这样的问题,首先要了解FTP的工作模式。

1.FTP的PORT(主动模式)和PASV(被动模式)

(1) PORT(主动模式)PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:
(2) PASV(被动模式)PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

1.docker拉取ftp镜像

docker pull fauria/vsftpd

2.启动ftp镜像

docker run -d -p 2121:21 -p 2020:20 -p 21100-21110:21100-21110 \
-v /var/ftp:/home/vsftpd \
-e FTP_USER=ftp \
-e FTP_PASS=123456 \
-e PASV_ADDRESS=xxx.xxx.xxx.xxx\
-e PASV_MIN_PORT=21100 \
-e PASV_MAX_PORT=21110 \
--name vsftpd \
--restart=always fauria/vsftpd

如果是主机模式则不用映射端口,完全依赖主机端口

docker run -d --net=host \
-v /var/ftp:/home/vsftpd \
-e FTP_USER=ftp \
-e FTP_PASS=123456 \
-e PASV_ADDRESS=xxx.xxx.xxx.xxx\
-e PASV_MIN_PORT=21100 \
-e PASV_MAX_PORT=21110 \
--name vsftpd \
--restart=always fauria/vsftpd

参数解释:

-p 2121:21 -p 2020:20  映射daocker和宿主机的端口号,通过ftp客户端,连接宿主机的2121端口,可以连接ftp服务器。2020端口,为docker映射到宿主机的数据传输端口。

PASV_ADDRESS填写服务器的IP地址,被动模式会把该地址告知给客户端(其他机器能访问到,云服务器则用公网IP,局域网地址则用局域网IP,不能用127.0.0.1,否则只能主动模式能用,被动模式无法链接) 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust的函数和注释

1.函数 声明函数使用 fn 关键字rust使用snake case 命名规范,即所有的字母都是小写的,单词之间使用下划线分开 fn main(){println!("hello world");another_function(); fn another_function(){println!("Another function"); }函…

Vscode配置grpc+c#+proto

首先是环境配置,用的dotnet5.0的sdk,所以Vscode的C#插件版本要选择1.24,然后需要配置C# Snippets、NuGget Package Manager、vscode-proto3、vscode-solution-extension(可选)。 以vscode-solution-extension为例新建A…

学习day47

Vue 现在开始学Vue了,问了同学,他说这个东西的内容很多。然后就跟着尚硅谷来学Vue了 用的是visual studio code,所以又下了一个visual。 首先时下载Vue,我再Vue3的官网是没有看到下载的,所以是跑到Vue2去下载的 将它…

G1垃圾收集分类-JVM(十四)

上篇文章说了G1不在是连续的老年代年轻代,而是分为不同的region,有eden,survivor,old,humongous,当大于百分之50region的数据则直接进入humongous,如果对象太大,会连续的存储&#x…

P8271 [USACO22OPEN] COW Operations S 奶牛操作

P8271 [USACO22OPEN] COW Operations S 奶牛操作 文章目录 P8271 [USACO22OPEN] COW Operations S 奶牛操作[USACO22OPEN] COW Operations S题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示分析code [P8271 USACO22OPEN] COW Operations S - 洛谷 | 计算机科学教…

使用Python的requests库发送HTTPS请求时的SSL证书验证问题

问题描述 使用python的requests库去发送https请求,有时候不设置verifyFalse不报错,有时候又报错。 问题原因 使用Python的requests库发送HTTPS请求时,设置verifyFalse参数可以跳过SSL证书验证。默认情况下,requests库会验证SSL…

在 Linux 系统上下载 Android SDK

使用ubuntu系统进行车机开发,今天开始配置环境,首先是下载android studio,然后下载android sdk,这里需要注意的是linux系统不能使用windows系统下的Android sdk,亲测会出现各种问题。 常规思路,下载sdk&am…

Jenkins的几种安装方式以及邮件配置

目录 Jenkins介绍 Jenkins下载、安装 一、通过war包安装 二、通过docker安装 jenkins 容器中添加 git, maven 等组件 jenkins 容器中的公钥私钥 在 jenkins 容器中调用 docker 简单的方式启动 Docker server REST API 一个 jenkins 示例 三、通过Homebrew安装 访问Je…

HDFS面试(自己学习版)

1.简单问题 1. HDFS的优点? 处理大数据容易扩展,直接加服务器高容错,多副本低要求 不需要优秀的服务器(负载均衡) 2.HDFS的缺点? 不适应实时 , 修改速率相对较慢(只能追加&#…

oceanbase基础

与mysql对比 分布式一致性算法 paxos 存储结构(引擎)用的是两级的 数据库自动分片功能,提供独立的obproxy路由写入查询等操作到对应的分片 多租户 方便扩展 存储层 http://www.hzhcontrols.com/new-1391864.html LSM tree,is very…

【cfengDB】自己实现数据库第0节 ---整体介绍及事务管理层实现

LearnProj 内容管理 MySQL系统结构一条SQL执行流程 cfengDB整体结构事务管理TM模块TID文件规则定义文件读写 -- NIORandomAccessFile、FileChannel、ByteBuffer接口实现文件合法检测begin()commit(tid)rollback(tid)tid文件创建 本文作为数工底层的项目CfengDB开始篇章&#xf…

UART串口通信协议

一、串行通信 串行通信分为两种方式:同步串行通信和异步串行通信。 同步串行通信需要通信双方在同一时钟的控制下,同步传输数据。 异步串行通信是指通信双方使用各自的时钟控制数据的发送和接收过程。 二、UART 通用异步收发传输器(Unive…

【Vue/element】 el-table实现表格动态新增/插入/删除 表格行,可编辑单元格

el-table实现表格动态新增/插入/删除 表格行,可编辑单元格 效果如下: 点击“新增一行”可以在表格最后新增一行,单元格内容可编辑 点击绿色按钮,可在指定行的后面插入一行 点击红色-按钮,可以删除指定行 原理&#…

让小程序动起来-轮播图的两种方式--【浅入深出系列003】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择啥是轮播图轮播图的关键代码最常见的轮播图代码便于理解的轮播代码两种轮播代码的比较 实际操练第一步,就是找到文件。第二步,先改动一下最显眼…

软件测试之语音识别功能如何测试?

语音识别功能的测试需要考虑以下几个方面: 1. 语音输入测试 测试语音识别系统能否准确识别用户的语音输入。这包括测试系统对各种不同语言、方言和口音的理解能力,以及对不同声音质量和噪音环境的鲁棒性测试。 2. 语义理解测试 测试语音识别系统能否准…

Docker使用总结

Docker 1.什么是 Docker 官网的介绍是“Docker is the world’s leading software container platform.” 官方给Docker的定位是一个应用容器平台。 Docker 是一个容器平台的领导者 Docker 容器平台 Docker 应用容器平台 application项目 Mysql Redis MongoDB ElasticSeacrh …

计算机网络相关知识点总结(一)

因特网的前身是1969年创建的第一个分组交换网 ARPANET。 ARPANET(Advanced Research Projects Agency Network)是美国国防高级研究计划局(ARPA)在20世纪60年代末到70年代初开发的一种计算机网络。 它被认为是互联网的前身&#…

分布式运用——存储系统Ceph

分布式运用——存储系统Ceph 一、Ceph 介绍1.Ceph 简介2、存储基础2.1 单机存储设备2.2 单机存储的问题2.3 商业存储解决方案2.4 分布式存储(软件定义的存储 SDS)2.5 分布式存储的类型 3.Ceph 优势3.1 高扩展性3.2 高可靠性3.3 高性能3.4 功能强大 4.Cep…

hybridCLR热更遇到问题

报错1: No ‘git‘ executable was found. Please install Git on your system then restart 下载Git安装: Git - Downloading Package 配置:https://blog.csdn.net/baidu_38246836/article/details/106812067 重启电脑 unity:…

macOS 开发 - NSAlert

文章目录 关于 NSAlert代码实现简单弹出Alert 类型贴着窗口 beginSheetModalForWindow添加按钮关于 NSAlert 官方文档:https://developer.apple.com/documentation/appkit/nsalert代码实现 简单弹出 - (void)showAlert3{NSAlert *alert