SFTP Docker镜像是一个基于OpenSSH的轻量级SFTP(SSH文件传输协议)和SCP服务器,支持多用户配置、卷挂载和自定义SSH密钥。该镜像为atmoz/sftp的分支版本,新增了SCP支持和多平台兼容性,适用于安全、便捷的文件传输场景。
| 标签 | 说明 | Dockerfile链接 |
|---|---|---|
debian | 基于Debian系统,默认标签(latest) | Dockerfile |
alpine | 基于Alpine系统,体积更小 | Dockerfile-alpine |
/etc/sftp.d/目录执行自定义启动脚本,实现高级配置(如绑定挂载、权限调整等)。用户可通过以下三种方式定义,语法格式为:
user:pass[:e][:uid[:gid[:dir1[,dir2]...]]]
| 参数 | 说明 |
|---|---|
user | 用户名(必填) |
pass | 密码(明文或加密,若加密需添加:e标记) |
e | 可选,标记密码为加密格式(如使用crypt生成的哈希) |
uid | 可选,用户ID(自定义以匹配主机文件权限) |
gid | 可选,组ID |
dir | 可选,用户主目录下的子目录列表(自动创建,具有写权限) |
示例:foo:pass:1001:100:upload,docs 表示用户foo,密码pass,UID=1001,GID=100,自动创建upload和docs子目录。
直接在启动命令中指定用户,多个用户用空格分隔:
bashdocker run ... jmcombs/sftp "user1:pass1:1001" "user2:pass2:1002:100:data"
通过SFTP_USERS环境变量传入用户配置:
bashdocker run -e SFTP_USERS="user1:pass1:1001 user2:pass2:1002" ... jmcombs/sftp
挂载包含用户配置的文件至/etc/sftp/users.conf(只读权限):
bashdocker run -v /host/users.conf:/etc/sftp/users.conf:ro ... jmcombs/sftp
配置文件格式(每行一个用户):
iniuser1:pass1:1001:100:upload # 用户1:密码明文,UID=1001,GID=100,创建upload目录 user2:$1$xyz$abc:e:1002 # 用户2:密码加密(带:e标记),UID=1002
/home/<user>),需通过子目录实现文件上传(用户无法直接在主目录创建文件)。/etc/ssh/ssh_host_*)。创建用户foo(密码pass),自动生成upload目录,映射容器22端口至主机22端口:
bashdocker run -p 22:22 -d jmcombs/sftp foo:pass:::upload
将主机目录挂载至用户foo的upload子目录,指定UID=1001以匹配主机权限:
bashdocker run \ -v /host/upload:/home/foo/upload \ # 挂载主机目录至用户子目录 -p 2222:22 \ # 主机2222端口映射容器22端口 -d jmcombs/sftp \ foo:pass:1001 # 用户配置:用户名foo,密码pass,UID=1001
yamlversion: "3" services: sftp: image: jmcombs/sftp volumes: - /host/upload:/home/foo/upload # 挂载主机目录 ports: - "2222:22" # 端口映射 command: foo:pass:1001 # 用户配置
登录方式:使用SFTP客户端连接主机2222端口:
bashsftp -P 2222 foo@<主机IP>
挂载用户配置文件,批量定义用户:
users.conf:inifoo:123:1001:100:data # 用户foo,密码123,UID=1001,GID=100,创建data目录 bar:456:1002:100:docs # 用户bar,密码456,UID=1002,GID=100,创建docs目录
bashdocker run \ -v /host/users.conf:/etc/sftp/users.conf:ro \ # 挂载配置文件(只读) -v sftp_data:/home \ # 挂载卷存储用户数据 -p 2222:22 -d jmcombs/sftp
使用加密密码(需添加:e标记),避免明文传输:
crypt模块):bashdocker run --rm python:alpine python -c "import crypt; print(crypt.crypt('YOUR_PASSWORD'))"
输出示例:$1$0G2g0GSt$ewU0t6GXG15.0hWoOX8X9.
bashdocker run \ -v /host/share:/home/foo/share \ -p 2222:22 -d jmcombs/sftp \ 'foo:$1$0G2g0GSt$ewU0t6GXG15.0hWoOX8X9.:e:1001' # :e标记表示密码已加密
挂载公钥文件至用户.ssh/keys/目录,自动添加至authorized_keys:
bashdocker run \ -v /host/id_rsa.pub:/home/foo/.ssh/keys/id_rsa.pub:ro \ # 挂载公钥 -v /host/share:/home/foo/share \ -p 2222:22 -d jmcombs/sftp \ foo::1001 # 密码留空(仅允许密钥登录),UID=1001
挂载自定义主机密钥,避免容器重建导致指纹变化:
bashssh-keygen -t ed25519 -f ssh_host_ed25519_key < /dev/null # ED25519密钥 ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key < /dev/null # RSA密钥
bashdocker run \ -v /host/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key \ -v /host/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key \ -v /host/share:/home/foo/share \ -p 2222:22 -d jmcombs/sftp \ foo::1001
将脚本挂载至/etc/sftp.d/目录,容器启动时自动执行(如绑定挂载目录):
/host/sftp.d/bindmount.sh:bash#!/bin/bash # 绑定挂载示例:将/data/common共享至多个用户目录 function bindmount() { mkdir -p "$2" mount --bind "$1" "$2" # 绑定挂载源目录至目标目录 } bindmount /data/common /home/dave/common # 用户dave的common目录 bindmount /data/common /home/peter/common # 用户peter的common目录 bindmount /data/docs /home/peter/docs --read-only # 只读挂载docs目录
CAP_SYS_ADMIN权限):bashdocker run \ --cap-add=CAP_SYS_ADMIN \ # 允许mount系统调用 -v /host/sftp.d:/etc/sftp.d:ro \ # 挂载脚本目录 -v /data:/data \ # 挂载源数据目录 -p 2222:22 -d jmcombs/sftp \ dave::1001 peter::1002 # 创建用户dave和peter
| 特性 | Debian版本 | Alpine版本 |
|---|---|---|
| 镜像大小 | 较大(约200MB) | 极小(约20MB,小10倍) |
| OpenSSH版本 | 稳定,仅包含安全修复和bugfix | 版本更新较快(6个月发布周期) |
| 适用场景 | 稳定性优先的生产环境 | 资源受限环境(如边缘设备) |
OpenSSH版本取决于基础镜像的包管理系统:
可通过以下链接查询具体版本:
镜像每日自动构建,确保集成基础镜像和OpenSSH的最新安全更新。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429