Docker:部署SFTP服务

郎家岭伯爵 2023年09月23日 553次浏览

前言

使用 Docker 部署 SFTP 服务,并解决文件中文乱码问题。

实现

拉取镜像

docker pull atmoz/sftp

创建Dockerfile

# 使用基础镜像
FROM atmoz/sftp

# 设置环境变量以指定UTF-8编码
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

# 设置SFTP用户及其根目录,需要确保这里设置的目录是存在的
ENV SFTP_USERS=langjialing:123456::/home/langjialing/upload

注:

  • 需确保目录 /home/langjialing/upload 存在(由于目录在容器内部,因此这部分在后续小结进行)。

构建镜像

docker build -t sftp_langjialing:latest .

注:

  • -t 选项用于指定镜像的名称和标签,sftp_langjialing:latest 是我们为这个镜像选择的名称和标签。
  • . 这个点表示 Docker 构建上下文的路径。在这种情况下,它表示当前目录,也就是命令所在的目录。Docker 构建时,它会查找这个路径下的 Dockerfile,Dockerfile 是一个包含构建指令的文本文件,它告诉 Docker 如何构建镜像。

拓展

如果当前目录有多个 Dockerfile 文件,我们可以用 -f 来指定文件构建镜像。

运行容器

docker run -d -p 2222:22 --name sftp_langjialing -e SFTP_USERS=langjialing:123456 sftp_langjialing

注:

  • docker run: 这是用于在 Docker 中运行容器的命令。
  • -d: 这是一个选项,表示容器应该在后台(detached mode)运行,也就是不占用当前终端,并在后台运行。
  • -p 2222:22: 这是另一个选项,用于指定端口映射。这个选项将容器的端口 22 映射到宿主机的端口 2222,这是因为 SFTP 默认使用 SSH 的端口 22,但为了避免与宿主机冲突,将其映射到宿主机的不同端口。
  • --name sftp_langjialing: 这个选项用于为容器指定一个名称,即容器的名称将被设置为 sftp_langjialing,这个名称可以用于后续管理容器。
  • -e SFTP_USERS=langjialing:123456: 这个选项通过环境变量 -e 来传递容器的环境变量。在这里,它定义了一个名为 SFTP_USERS 的环境变量,将用户名 langjialing 和密码 123456 传递给 SFTP 服务器。这个环境变量用于配置 SFTP 用户。
  • sftp_langjialing: 这是要运行的容器的名称或镜像名称。它告诉 Docker 运行名为 sftp_langjialing 的容器,基于一个已有的 Docker 镜像。

进入容器内容,检查文件夹是否存在

进入容器内容,检查在 Dockerfile 中指定的文件夹是否存在。如果不存在的话需要手动进行创建,并进行赋权。

# 找到容器id
docker ps

# 进入容器内容
docker exec -it ff bash

# 查看Dockerfile中指定的文件夹是否存在,如果不存在则创建目录,并进行赋权
# 文件夹不存在,创建文件夹
mkdir upload
# 赋权
chmod 777 upload/

使用xftp进行连接测试

文件上传时踩的坑

在进行文件上传时,一定要设置文件的编码格式,否则上传后文件名中的中文会显示乱码! 如果我们使用编程语言连接 SFTP 获取文件名,获取到的也将会是乱码名称。

文件上传编码设置

  1. 打开当前窗口的”属性“设置:

  2. 选择会话名称:

  3. 选择编码格式:

总结

在 Docker 中部署 SFTP 服务,并解决中文乱码问题。

赞助页面示例