使用Docker部署Samba文件共享服务

Jun 11, 2025·
Orochi
Orochi
· 3 min read

Docker部署Samba服务指南

1. 准备工作

1.1 创建共享目录

# 创建本地共享目录
mkdir -p /data/samba/share
chmod -R 777 /data/samba/share

# 创建配置目录
mkdir -p /data/samba/config

1.2 创建Samba配置文件

# 创建smb.conf配置文件
cat > /data/samba/config/smb.conf << EOF
[global]
   workgroup = WORKGROUP
   server string = Samba Server
   server role = standalone server
   log file = /var/log/samba/log.%m
   max log size = 50
   dns proxy = no
   map to guest = Bad User

[share]
   comment = Docker Samba Share
   path = /share
   browseable = yes
   read only = no
   guest ok = yes
   create mask = 0777
   directory mask = 0777
EOF

2. 部署Samba服务

2.1 使用Docker命令部署

# 运行Samba容器
docker run -d \
  --name samba \
  --restart unless-stopped \
  -p 139:139 \
  -p 445:445 \
  -v /data/samba/share:/share \
  -v /data/samba/config/smb.conf:/etc/samba/smb.conf \
  dperson/samba \
  -u "user1;password1" \
  -s "share;/share;yes;no;no;all;user1"

2.2 使用Docker Compose部署

# docker-compose.yml
version: '3'
services:
  samba:
    image: dperson/samba
    container_name: samba
    restart: unless-stopped
    ports:
      - "139:139"
      - "445:445"
    volumes:
      - /data/samba/share:/share
      - /data/samba/config/smb.conf:/etc/samba/smb.conf
    environment:
      - TZ=Asia/Shanghai
    command: '-u "user1;password1" -s "share;/share;yes;no;no;all;user1"'

3. 用户和权限管理

3.1 添加Samba用户

# 进入容器
docker exec -it samba bash

# 添加用户
adduser username
smbpasswd -a username

# 设置密码
smbpasswd username

3.2 配置共享权限

# 在smb.conf中添加新的共享
[private]
   comment = Private Share
   path = /share/private
   browseable = yes
   read only = no
   guest ok = no
   valid users = username
   create mask = 0700
   directory mask = 0700

4. 访问共享目录

4.1 Windows访问

1. 打开文件资源管理器
2. 在地址栏输入:\\服务器IP
3. 输入用户名和密码

4.2 Linux访问

# 安装smbclient
sudo apt-get install smbclient

# 列出共享
smbclient -L //服务器IP -U username

# 挂载共享
sudo mount -t cifs //服务器IP/share /mnt/samba \
  -o username=user1,password=password1

4.3 macOS访问

# Finder中使用
1. 按下 Command+K
2. 输入:smb://服务器IP
3. 输入用户名和密码

5. 安全配置

5.1 网络安全

# 在smb.conf的[global]部分添加
hosts allow = 192.168.1. 127.
hosts deny = all

5.2 加密设置

# 在smb.conf的[global]部分添加
server signing = mandatory
smb encrypt = required

6. 监控和维护

6.1 查看日志

# 查看Samba日志
docker exec samba tail -f /var/log/samba/log.smbd

# 查看容器日志
docker logs -f samba

6.2 性能优化

# 在smb.conf的[global]部分添加
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
read raw = yes
write raw = yes
max xmit = 65535
dead time = 15
getwd cache = yes

7. 常见问题处理

7.1 连接问题

# 检查端口是否开放
netstat -an | grep -E '139|445'

# 检查防火墙设置
sudo ufw status
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp

7.2 权限问题

# 检查目录权限
ls -la /data/samba/share

# 修复权限
chmod -R 777 /data/samba/share
chown -R nobody:nogroup /data/samba/share

8. 备份和恢复

8.1 配置备份

# 备份配置文件
cp /data/samba/config/smb.conf /data/samba/config/smb.conf.bak

# 备份共享数据
tar -czf samba_share_backup.tar.gz /data/samba/share

8.2 数据恢复

# 恢复配置文件
cp /data/samba/config/smb.conf.bak /data/samba/config/smb.conf

# 恢复共享数据
tar -xzf samba_share_backup.tar.gz -C /

9. 一条命令启动samba服务

docker run -it --name samba -p 139:139 -p 445:445 -v /home/share:/mount -d dockerproxy.cn/dperson/samba -u "user;123456" -s "share;/mount/;yes;no;no;all;user;user"
Orochi
Authors
充满活力和热情的软件从业者
在不同的公司和项目中工作过,担任过各种职务,做过各类项目(如企业站点、内部中台、边缘设备服务、客户端开发、大模型训练、大模型适配和任务调度等等),广泛的视野和经验.