
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
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 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务