
SFTP Docker镜像是一个基于OpenSSH的轻量级SFTP(SSH文件传输协议)和SCP服务器,支持多用户配置、卷挂载和自定义SSH密钥。该镜像为atmoz/sftp的分支版本,新增了SCP支持和多平台兼容性,适用于安全、便捷的文件传输场景。
| 标签 | 说明 | Dockerfile链接 |
|---|---|---|
debian | 基于Debian系统,默认标签(latest) | https://github.com/jmcombs/sftp/blob/master/Dockerfile |
alpine | 基于Alpine系统,体积更小 | https://github.com/jmcombs/sftp/blob/master/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子目录。
1. 命令参数定义用户
直接在启动命令中指定用户,多个用户用空格分隔:
bashdocker run ... jmcombs/sftp "user1:pass1:1001" "user2:pass2:1002:100:data"
2. 环境变量定义用户
通过SFTP_USERS环境变量传入用户配置:
bashdocker run -e SFTP_USERS="user1:pass1:1001 user2:pass2:1002" ... jmcombs/sftp
3. 配置文件定义用户
挂载包含用户配置的文件至/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以匹配主机权限:
Docker命令:
bashdocker run \ -v /host/upload:/home/foo/upload \ # 挂载主机目录至用户子目录 -p 2222:22 \ # 主机2222端口映射容器22端口 -d jmcombs/sftp \ foo:pass:1001 # 用户配置:用户名foo,密码pass,UID=1001
Docker Compose配置:
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的最新安全更新。
以下是 jmcombs/sftp 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务