前言
使用 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 获取文件名,获取到的也将会是乱码名称。
文件上传编码设置
-
打开当前窗口的”属性“设置:
-
选择会话名称:
-
选择编码格式:
总结
在 Docker 中部署 SFTP
服务,并解决中文乱码问题。