SFTP 镜像是一个基于 OpenSSH 的轻量级、易用的 SSH 文件传输协议(SFTP)服务器。它提供安全的文件传输能力,支持多种用户配置方式和灵活的卷挂载,适用于个人、团队或服务器间的安全文件共享场景。
SFTP_USERS 环境变量或配置文件(/etc/sftp/users.conf)定义用户/etc/sftp.d/ 目录下的脚本,支持自定义初始化逻辑debian, latest (Dockerfile)alpine (Dockerfile)支持三种用户定义方式,语法统一为:
user:pass[:e][:uid[:gid[:dir1[,dir2]...]]]
| 字段 | 说明 |
|---|---|
user | 用户名(必填) |
pass | 密码(必填,若使用密钥登录可留空,格式为 user::uid...) |
:e | 可选标记,指示密码为加密格式(如 MD5 加密) |
uid | 可选用户 ID,用于匹配主机文件系统权限 |
gid | 可选用户组 ID,用于匹配主机文件系统权限 |
dir1... | 可选子目录列表,将在用户主目录下自动创建并赋予写权限(若不存在) |
docker run 或 docker-compose 的 command 中指定用户SFTP_USERS 环境变量定义(格式同上)/etc/sftp/users.conf(每行一个用户,格式同上)/home/<user>),无法访问主目录外的文件/home/foo/upload),避免直接挂载 /home(用户无法在主目录根目录创建文件)/etc/ssh/ssh_host_*)| 变量名 | 说明 |
|---|---|
SFTP_USERS | 定义用户,格式同命令参数(如 SFTP_USERS="foo:pass:1001 bar:abc:1002") |
bashdocker run -p 22:22 -d atmoz/sftp foo:pass:::upload
说明:
foo,密码 pass,自动在其主目录下创建 upload 子目录sftp foo@<主机IP> 登录并上传文件到 upload 目录挂载主机目录到用户主目录,并指定 UID 以匹配主机权限:
bashdocker run \ -v /host/path/upload:/home/foo/upload \ # 挂载主机目录到用户子目录 -p 2222:22 -d atmoz/sftp \ # 映射容器 22 端口到主机 2222 端口 foo:pass:1001 # 用户 foo,密码 pass,UID=1001
yamlsftp: image: atmoz/sftp volumes: - /host/path/upload:/home/foo/upload # 挂载主机目录 ports: - "2222:22" # 端口映射 command: foo:pass:1001 # 用户定义(格式:user:pass:uid)
通过 OpenSSH 客户端连接:
bashsftp -P 2222 foo@<主机IP> # -P 指定主机端口(2222),foo 为用户名
将用户信息存储在配置文件中,便于管理多用户:
创建主机配置文件 /host/path/users.conf:
inifoo:123:1001:100 # 用户 foo,密码 123,UID=1001,GID=100 bar:abc:1002:100 # 用户 bar,密码 abc,UID=1002,GID=100 baz:xyz:1003:100 # 用户 baz,密码 xyz,UID=1003,GID=100
启动容器:
bashdocker run \ -v /host/path/users.conf:/etc/sftp/users.conf:ro \ # 只读挂载配置文件 -v sftp_data:/home \ # 挂载数据卷存储用户主目录 -p 2222:22 -d atmoz/sftp
通过 :e 标记加密密码(需提前生成加密字符串):
bashdocker run \ -v /host/path/share:/home/foo/share \ -p 2222:22 -d atmoz/sftp \ 'foo:$1$0G2g0GSt$ewU0t6GXG15.0hWoOX8X9.:e:1001' # 加密密码(MD5格式),UID=1001
使用 atmoz/makepasswd 工具生成 MD5 加密密码:
bashecho -n "your-password" | docker run -i --rm atmoz/makepasswd --crypt-md5 --clearfrom=-
通过挂载公钥文件实现密钥认证(无需密码):
bashdocker run \ -v /host/path/id_rsa.pub:/home/foo/.ssh/keys/id_rsa.pub:ro \ # 挂载公钥到用户密钥目录 -v /host/path/share:/home/foo/share \ -p 2222:22 -d atmoz/sftp \ foo::1001 # 密码留空(仅允许密钥登录),UID=1001
说明:
.ssh/keys/ 目录(容器会自动将所有公钥追加到 .ssh/authorized_keys).ssh/authorized_keys 文件(OpenSSH 要求该文件权限为 600,直接挂载可能权限错误)默认容器会自动生成 SSH 主机密钥,若需避免重建容器时用户收到 MITM 警告,可挂载自定义主机密钥:
生成主机密钥(主机执行):
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 密钥(4096位)
启动容器时挂载密钥:
bashdocker run \ -v /host/path/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key \ -v /host/path/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key \ -v /host/path/share:/home/foo/share \ -p 2222:22 -d atmoz/sftp \ foo::1001
容器启动时自动运行 /etc/sftp.d/ 目录下的脚本,用于自定义初始化(如绑定挂载目录):
创建脚本 /host/path/bindmount.sh:
bash#!/bin/bash # 绑定挂载示例:将主机目录挂载到用户子目录 function bindmount() { if [ -d "$1" ]; then mkdir -p "$2" fi mount --bind $3 "$1" "$2" # $3 为可选参数(如 --read-only) } # 绑定挂载(需容器开启 CAP_SYS_ADMIN 权限) bindmount /data/common /home/dave/common bindmount /data/docs /home/peter/docs --read-only # 只读挂载
启动容器(需添加 --cap-add=SYS_ADMIN 权限):
bashdocker run \ --cap-add=SYS_ADMIN \ # 允许使用 mount 命令 -v /host/path/bindmount.sh:/etc/sftp.d/bindmount.sh \ -v /host/data:/data \ # 挂载主机数据目录 -p 2222:22 -d atmoz/sftp \ dave::1001 peter::1002
| 特性 | Debian 版本 | Alpine 版本 |
|---|---|---|
| 体积 | 较大(约 200MB+) | 极小(约 20MB+,比 Debian 小 10 倍) |
| 稳定性 | 高(仅修复 bug 和安全问题,发布周期约 2 年) | 较快(发布周期约 6 个月,版本更新频繁) |
| OpenSSH 版本 | 较旧但稳定 | 较新(随 Alpine 发行版更新) |
选择建议:追求稳定性选 Debian,追求轻量和新版本选 Alpine。
OpenSSH 版本取决于基础镜像的发行版:
注意:镜像构建延迟可能导致 OpenSSH 版本略滞后于基础镜像***包(通常 1-5 天),如需精确版本可手动克隆源码构建。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 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