如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

2025-03-04 05:50

本文主要是介绍如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N...

Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

使用 Docker 部署 FTP 和 Nginx 通过 HTTP 访问 FTP 里的文件,这是一个常见的需求,通常用于将存储在 FTP 服务器上的文件通过 Web 方式提供访问。

以下是如何操作的详细步骤:

1. 部署 FTP 服务器 (vsftpd)

我们使用 fauria/vsftpd 镜像,因为它配置简单且常用。

创建存储目录: 在宿主机上创建一个目录用于 FTP 存储文件。

mkdir -p /path/to/ftp/data

/path/to/ftp/data 替换为你希望使用的实际路径。

运行 vsftpd 容器:

docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 \
    -v /path/to/ftp/data:/home/vsftpd \
    -e FTP_USER=ftpuser -e FTP_PASS=ftppass \
    -e PASV_ENABLE=YES -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
    --name ftpserver fauria/vsftpd
  • -p 21:21 -p 20:20: 映射 FTP 的控制端口 (21) 和数据端口 (20)。
  • -p 21100-21110:21100-21110: 映射被动模式的端口范围。被动模式对于 Docker 环境很重要。
  • -v /path/to/ftp/data:/home/vsftpd: 将宿主机目录挂载到容器内的 FTP 用户目录。
  • -e FTP_USER=ftpuser -e FTP_PASS=ftppass: 设置 FTP 用户名和密码。请务必修改为你自己的用户名和密码。
  • -e PASV_ENABLE=YES -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110: 启用被动模式并指定端口范围,这对于在 Docker 容器中使用 FTP 非常重要。
  • --name ftpserver: 为容器命名。

验证 FTP 连接: 使用 FTP 客户端(如 FileZilla)连接到你的服务lzFKycdha器。

2. 部署 Nginx

创建 Nginx 配置文件: 创建一个名为 nginx.conf 的文件,内容如下:

user  root; # 用户使用root,否则没有权限访问FTP用户上传的文件
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    Access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;  # 注释掉这句,否则里面的默认配置会覆配置盖下面的server配置
        server {
                listen       80;
                listen  [::]:80;
                server_name  localhost; # 修改为你的域名或 IP 地址

                location / {
                        root   /ftp/data; # Nginx 访问的根目录,稍后会通过挂载 FTP 数据目录实现
                        iandroidndex  index.html index.htm;
                }

                error_page   500 502 503 504  /50x.html;
                location = /50x.html {
                        root   /ftp/data;
                }
        }
}

运行 Nginx 容器:

Bash

docker run -d -p 80:80 js
    -v /path/to/ftp/data:/ftp/data \
    -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf \
    --name webserver nginx:latest
  • -p 80:80: 映射 Nginx 的 80 端口。
  • -v /path/to/ftp/data:/ftp/data: 关键步骤! 将 FTP 数据目录挂载到 Nginx 容器内的 /ftp/data 目录。这样 Nwww.chinasem.cnginx 就可以访问 FTP 上的文件了。
  • -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf: 将我们创建的 Nginx 配置文件挂载到容器内。
  • --name webserver: 为China编程容器命名。
  • nginx:latest: 使用最新的 Nginx 镜像。

3. 访问 FTP 文件

现在,你可以通过浏览器访问服务器的 IP 地址 (例如 http://your_server_ip) 来浏览 FTP 上的文件。Nginx 将会提供一个文件列表,你可以点击链接下载文件。

使用 Docker Compose (推荐)

使用 Docker Compose 可以更方便地管理多个容器。

创建一个名为 docker-compose.yml 的文件,内容如下:

version: "3.9"
services:
  ftpserver:
    image: fauria/vsftpd
    ports:
      - "21:21"
      - "20:20"
      - "21100-21110:21100-21110"
    volumes:
      - ./ftpdata:/home/vsftpd # 注意使用相对路径
    environment:
      - FTP_USER=ftpuser
      - FTP_PASS=ftppass
      - PASV_ENABLE=YES
      - PASV_MIN_PORT=21100
      - PASV_MAX_PORT=21110
    restart: always

  webserver:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./ftpdata:/ftp/data # 共享同一个数据卷
      - ./nginx.conf:/etc/nginx/nginx.conf # 挂载配置文件
    depends_on:
      - ftpserver # 依赖于 ftpserver 启动
    restart: always
volumes:
 ftpdata: #定义数据卷

在该文件所在目录下运行 docker-compose up -d 即可同时启动 FTP 和 Nginx 容器。

关键点和注意事项:

  • 被动模式 (PASV): 在 Docker 环境中,FTP 客户端通常需要使用被动模式。确保正确配置被动模式的端口范围。
  • 数据卷: 使用数据卷来共享 FTP 和 Nginx 容器之间的文件。这是实现此功能的关键。
  • 安全性: 上述配置只是一个基本的示例。在生产环境中,你需要考虑安全性问题,例如使用 SFTP 而不是 FTP,配置防火墙,限制访问权限等。
  • 端口映射: 确保宿主机上没有其他服务占用这些端口。
  • 文件权限: 确保 FTP 容器和 Nginx 容器都具有访问共享目录的正确权限。

希望以上步骤能够帮助你成功搭建 FTP 和 Nginx 服务,并通过 HTTP 访问 FTP 上的文件。使用 Docker Compose 可以大大简化部署和管理过程,强烈推荐使用。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153631

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用