
adrianmusante/samba!logo
本镜像为Samba服务器的Docker化实现,基于dperson/samba进行更新维护。Samba是一款开源软件,自1992年起提供基于SMB/CIFS协议的文件和打印服务,支持DOS、Windows、OS/2、Linux等所有SMB/CIFS客户端,实现跨平台文件共享。
推荐从Docker Hub拉取预构建镜像:
bashdocker pull adrianmusante/samba
4、4.21、latest(基于samba/Dockerfile构建)查看Docker Hub标签页面获取所有可用版本。
默认配置无共享目录,需通过参数或环境变量添加。
bashdocker run -it -p 139:139 -p 445:445 -d adrianmusante/samba -p
bashdocker run -it --name samba -p 139:139 -p 445:445 \ -v /本地目录路径:/容器挂载路径 \ -d adrianmusante/samba -p
启动容器时可通过命令行参数配置Samba服务。运行以下命令查看所有选项:
bashdocker run -it --rm adrianmusante/samba -h
| 选项 | 描述 | 必需参数 | 示例 |
|---|---|---|---|
-h | 显示帮助信息 | 无 | -h |
-c "<from:to>" | 配置文件/目录名字符映射 | <from:to>(多个映射用逗号分隔) | -c "ä:a,ö:o" |
-G "<section;parameter>" | 添加smb.conf通用段配置 | <section>(段名)、<parameter>(配置项) | -G "share;log level = 2" |
-g "<parameter>" | 添加smb.conf全局配置 | <parameter>(配置项) | -g "workgroup = MYGROUP" |
-i "<path>" | 导入smbpassword文件 | <path>(容器内文件路径) | -i "/etc/samba/smbpasswd" |
-n | 启动nmbd守护进程(用于共享发现) | 无 | -n |
-p | 设置共享目录所有权和权限 | 无 | -p |
-r | 禁用共享回收站功能 | 无 | -r |
-S | 禁用SMB2最低版本要求 | 无 | -S |
-s "<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]" | 配置共享目录 | <name>(共享名)、<path>(容器内路径);可选参数默认值:browse=yes, readonly=yes, guest=no, users=all, admins=none | -s "public;/share;yes;no;no;user1,user2;;user1;公共共享" |
-u "<username;password>[;ID;group;GID]" | 添加用户 | <username>、<password>;可选:ID(用户ID)、group(组名)、GID(组ID) | -u "user1;pass123;1001;users;100" |
-w "<workgroup>" | 配置工作组(域) | <workgroup>(工作组名) | -w "MYGROUP" |
-W | 允许访问跨文件系统符号链接 | 无 | -W |
-I "<path>" | 在smb.conf末尾添加include配置 | <path>(容器内配置文件路径) | -I "/etc/samba/extra.conf" |
通过环境变量配置容器,支持多实例(如SAMBA_SHARE、SAMBA_SHARE2)。
| 环境变量 | 描述 | 示例 |
|---|---|---|
PUID | 设置默认用户(smbuser)的UID | 1000 |
PGID | 设置默认用户(smbuser)的GID | 1000 |
TZ | 设置时区 | Asia/Shanghai |
SAMBA_DEBUG | 启用详细日志模式 | true(默认:false) |
SAMBA_LOG_LEVEL | 设置日志级别(0-10,越高越详细) | 3(默认:0;SAMBA_DEBUG=true时默认3) |
SAMBA_CHARMAP | 字符映射配置(同-c) | "ä:a,ö:o" |
SAMBA_GENERIC | 通用段配置(同-G) | "share;log level = 2" |
SAMBA_GLOBAL | 全局配置(同-g) | "workgroup = MYGROUP" |
SAMBA_IMPORT | 导入smbpassword文件(同-i) | "/etc/samba/smbpasswd" |
SAMBA_NMBD | 启用nmbd守护进程(同-n) | true |
SAMBA_PERMISSIONS | 设置共享权限(同-p) | true |
SAMBA_RECYCLE | 禁用回收站(同-r) | true |
SAMBA_SHARE | 配置共享目录(同-s) | "public;/share;yes;no;no" |
SAMBA_SMB | 禁用SMB2最低版本(同-S) | true |
SAMBA_USER | 添加用户(同-u) | "user1;pass123;1001" |
SAMBA_WIDELINKS | 允许跨文件系统符号链接(同-W) | true |
SAMBA_WORKGROUP | 工作组配置(同-w) | "MYGROUP" |
SAMBA_INCLUDE | 添加include配置(同-I) | "/etc/samba/extra.conf" |
注意:启用nmbd(
-n或SAMBA_NMBD=true)时,需额外映射UDP端口:-p 137:137/udp -p 138:138/udp。部分环境下nmbd仅在使用主机网络模式时正常工作。
创建用户alice和bob,配置公共共享和私有共享:
bashdocker run -it --name samba -p 139:139 -p 445:445 \ -v /data/public:/share/public \ -v /data/alice:/share/alice \ -v /data/bob:/share/bob \ -d adrianmusante/samba -p \ -u "alice;AlicePass123" \ -u "bob;BobPass456" \ -s "public;/share/public;yes;no;yes;all;;alice,bob;公共文件共享" \ -s "alice_private;/share/alice;no;no;no;alice;;alice;Alice私有目录" \ -s "bob_private;/share/bob;no;no;no;bob;;bob;Bob私有目录" \ -w "MYHOME"
创建docker-compose.yml:
yamlversion: '3' services: samba: image: adrianmusante/samba container_name: samba restart: always ports: - "139:139" - "445:445" - "137:137/udp" - "138:138/udp" volumes: - ./public:/share/public - ./team:/share/team environment: - TZ=Asia/Shanghai - PUID=1000 - PGID=1000 - SAMBA_WORKGROUP=MYTEAM - SAMBA_NMBD=true - SAMBA_PERMISSIONS=true - SAMBA_USER="john;JohnPass789;1001;team;100" - SAMBA_USER2="jane;JanePass321;1002;team;100" - SAMBA_SHARE="public;/share/public;yes;no;yes;all;;john,jane;公共共享区" - SAMBA_SHARE2="team;/share/team;yes;no;no;john,jane;;john,jane;团队协作区" command: -p
启动服务:
bashdocker-compose up -d
change_to_user_internal: chdir_current_service() failed!解决:添加-p参数或设置SAMBA_PERMISSIONS=true以自动配置权限:
bashdocker run ... -d adrianmusante/samba -p
若无法修改文件权限,可设置PUID和PGID匹配宿主机文件所有者ID:
bashdocker run ... -e PUID=1000 -e PGID=1000 ...
解决:限制容器内存使用:
bashdocker run ... -m 512m ... # 限制最大内存为512MB
或在docker-compose中添加:
yamlservices: samba: ... deploy: resources: limits: memory: 512M
smbclient连接失败解决:默认禁用SMB1,需指定SMB3协议:
bashsmbclient -m SMB3 //server_ip/share_name -U username
如遇问题或有疑问,请通过GitHub Issues提交反馈。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务