Docker 搭建 FTP

介绍

FTP(File Transfer Protocol),即文件传输协议,是一种用于在网络上进行文件传输的标准协议。在本文中,我们将使用 Docker 来搭建一个简单的 FTP 服务器,以便我们可以方便地在本地和远程之间传输文件。

准备工作

在开始之前,我们需要确保已经安装了 Docker。如果你还没有安装 Docker,请根据你的操作系统从 Docker 官网上下载并安装。

搭建 FTP 服务器

首先,我们需要创建一个名为 docker-ftp 的目录,并在其中创建一个名为 Dockerfile 的文件。在 Dockerfile 文件中,我们将定义构建 FTP 服务器镜像所需的步骤。

FROM stilliard/pure-ftpd

RUN echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
RUN echo "yes" > /etc/pure-ftpd/conf/VerboseLog
RUN echo "yes" > /etc/pure-ftpd/conf/NoAnonymous
RUN echo "yes" > /etc/pure-ftpd/conf/UnixAuthentication
RUN echo "yes" > /etc/pure-ftpd/conf/ProhibitDotFilesWrite

在上述代码中,我们使用了 stilliard/pure-ftpd 镜像作为基础镜像,并在其基础上进行配置。我们设置了一些参数,如 ChrootEveryone 用于限制用户只能访问自己的目录,VerboseLog 用于输出详细的日志信息,NoAnonymous 禁止匿名访问等等。

接下来,我们需要构建镜像。在 docker-ftp 目录下打开终端,执行以下命令:

docker build -t my-ftp .

该命令将根据 Dockerfile 中的定义构建镜像,并将其命名为 my-ftp

现在,我们可以运行 FTP 服务器容器了。执行以下命令:

docker run -d -p 21:21 -p 30000-30009:30000-30009 --name my-ftp-container my-ftp

该命令将在后台运行一个名为 my-ftp-container 的容器,并将主机的 21 端口映射到容器的 21 端口,以及主机的 30000-30009 端口范围映射到容器的 30000-30009 端口范围(用于被动模式)。

连接 FTP 服务器

现在,我们可以使用 FTP 客户端连接到我们刚刚搭建的 FTP 服务器了。在终端中,执行以下命令:

ftp localhost 21

该命令将连接到本地主机的 21 端口(我们在上一步中将其映射到了容器内的 21 端口)。

在连接成功后,你可以使用 FTP 客户端提供的命令来进行文件的上传、下载和管理等操作。以下是一些常用的 FTP 命令:

  • ls:列出当前目录下的文件和文件夹。
  • cd:切换到指定目录。
  • get:下载文件。
  • put:上传文件。
  • mkdir:创建目录。
  • delete:删除文件或目录。

配置匿名访问

如果你想允许匿名用户访问 FTP 服务器,并限制其只能读取文件而不能上传或删除文件,可以按照以下步骤进行配置。

首先,打开 docker-ftp 目录下的 Dockerfile 文件,将以下内容添加到文件末尾:

RUN echo "yes" > /etc/pure-ftpd/conf/NoAnonymousUpload
RUN echo "yes" > /etc/pure-ftpd/conf/AnonymousCanCreateDirs
RUN echo "no" > /etc/pure-ftpd/conf/AnonymousCantUpload
RUN echo "yes" > /etc/pure-ftpd/conf/AnonymousOnly

这些配置将禁止匿名用户上传文件,并允许其创建目录和只读访问。

接下来,重新构建镜像:

docker build -t my-ftp .

最后,停止并删除