Skip to content

🚀 使用 Docker Compose 部署 samba

下面是一份为新手准备的Samba Docker Compose部署教程,它将帮你快速在Linux服务器上搭建一个安全、高效、跨平台的文件共享服务,让Windows、macOS和Linux设备都能轻松访问共享文件。

🎯 Samba简介与核心优势

Samba是一个开源的软件套件,它实现了SMB/CIFS协议,使得不同操作系统之间可以像访问本地资源一样共享文件和打印机。

选择Docker部署Samba的优势: * 简化部署:避免了在不同Linux发行版上手动安装和配置的复杂性。 * 环境隔离:Samba服务与宿主机环境隔离,更安全且易于维护。 * 快速重置:配置出错或需要迁移时,能快速重建服务。 * 版本灵活:可以轻松尝试或回滚到不同的Samba版本。

⚙️ 一、部署前准备

  1. 环境要求

    • 已安装 DockerDocker Compose
    • 建议系统内存不少于 1GB
    • 确保服务器的 445和139端口 未被占用。
  2. 环境检查 在终端中执行以下命令,确认Docker环境正常: bash docker --version docker-compose --version

  3. 创建项目目录 创建一个独立的目录来管理Samba的所有文件,这有助于日后管理和备份。 bash mkdir -p /opt/docker/samba cd /opt/docker/samba 在此目录下,你需要创建两个文件:docker-compose.ymlsmb.conf

🛠️ 二、配置Docker Compose与Samba

1. 创建 docker-compose.yml

此文件用于定义和运行Samba容器。将以下内容保存为 docker-compose.yml

services:
  samba:
    container_name: samba
    privileged: true
    network_mode: host
    volumes:
      - ./data:/samba/data # 持久化存储共享文件
      - ./config:/etc/samba # 持久化存储Samba配置
    ulimits:
      nofile:
        soft: 131072  
        hard: 131072
    restart: unless-stopped
    image: dperson/samba
    deploy:
     resources:
       limits:
        #cpus: '5'
        #memory: 2G
        cpus: '1.0'  # 限制CPU使用,可根据实际情况调整
        memory: 1G    # 限制内存使用,可根据实际情况调整
    command: >
      -g "client min protocol = SMB3_11"  
      -g "server min protocol = SMB3_11"
      -g "disable spoolss = yes"
      -g "load printers = no"
      -g "printing = bsd"
      -g "printcap name = /dev/null"
      -g "log level = 1" 
      -u "user1;user1" 
      -u "user2;user2"
      -s "User1;/samba/data/user1;yes;no;no;user1" 
      -s "User2;/samba/data/user2;yes;no;no;user2"

关键配置说明

配置项 说明与建议
network_mode: host 容器使用宿主机的网络栈,可以简化网络配置,并可能提升性能。
volumes ./data:/samba/data 将容器内的共享目录映射到本地,确保文件不丢失。./config:/etc/samba 用于持久化Samba的配置文件。
ulimits 提升容器可打开的文件数限制,适用于需要处理大量文件的场景。
command -u 创建用户,-s 定义共享目录。此处创建了user1user2,并为它们分别配置了私人共享目录。

2. 创建 smb.conf

此文件是Samba服务的核心配置文件。在/opt/docker/samba目录下创建config文件夹,然后将提供的smb.conf内容保存到/opt/docker/samba/config/smb.conf

mkdir -p /opt/docker/samba/config
# 使用文本编辑器将提供的smb.conf内容保存到 /opt/docker/samba/config/smb.conf

将以下内容保存为 smb.conf

[global]
   server min protocol = SMB3_11
   client min protocol = SMB3_11
   workgroup = WORKGROUP
   server role = standalone server
   security = user
   passdb backend = tdbsam:/etc/samba/users.db
   log level = 1

   # 兼容的速度优化参数 (Samba 4.15+ 官方推荐)
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE
   use sendfile = yes
   min receivefile size = 16384
   aio read size = 16384
   aio write size = 16384
   max xmit = 65536
   getwd cache = yes
   strict locking = no

   # 大文件传输优化
   strict allocate = no
   read raw = yes
   write raw = yes

   # 稳定性优化
   deadtime = 30
   keepalive = 60
   max connections = 1000

   # 禁用打印
   load printers = no
   disable spoolss = yes
   printing = bsd
   printcap name = /dev/null

[User1]
   path = /samba/data/user1
   browsable = yes
   read only = no
   guest ok = no
   veto files = /.apdisk/.DS_Store/.TemporaryItems/.Trashes/desktop.ini/ehthumbs.db/Network Trash Folder/Temporary Items/Thumbs.db/
   delete veto files = yes
   valid users = user1

[User2]
   path = /samba/data/user2
   browsable = yes
   read only = no
   guest ok = no
   veto files = /.apdisk/.DS_Store/.TemporaryItems/.Trashes/desktop.ini/ehthumbs.db/Network Trash Folder/Temporary Items/Thumbs.db/
   delete veto files = yes
   valid users = user2


这份配置文件为你预设了: * 全局优化:设置了SMB 3.11协议(现代、安全),并包含了针对速度和大文件传输的优化参数。 * 共享定义:配置了User1User2两个共享目录,分别仅允许对应用户访问。 * 隐私与安全:禁用了打印机服务(容器中通常不需要),并过滤了 macOS (.DS_Store) 和 Windows (Thumbs.db) 的隐藏文件,保持共享目录整洁。

🚀 三、启动与验证

  1. 构建并启动服务docker-compose.yml 文件所在目录执行: bash docker-compose up -d 此命令会拉取镜像并在后台启动容器。

  2. 检查服务状态 bash docker-compose ps 如果看到 samba 容器的状态为 Up,说明服务已成功启动。

  3. 查看实时日志(可选) 如果遇到问题,可以通过以下命令查看容器日志来排查: bash docker-compose logs -f samba

🖥️ 四、访问Samba共享

从Windows访问: 1. 打开文件资源管理器,在地址栏输入 \\你的服务器IP地址 (例如 \\192.168.1.100)。 2. 在弹出的认证窗口中,输入你在docker-compose.ymlcommand部分定义的用户名和密码(例如,用户 user1,密码 user1)。 3. 成功认证后,你将看到以你用户名命名的共享文件夹(例如User1),即可访问。

从macOS访问: 1. 在访达中,选择菜单栏的"前往" > "连接服务器"。 2. 在服务器地址中输入 smb://你的服务器IP地址 (例如 smb://192.168.1.100)。 3. 输入用户名和密码即可连接。

从Linux访问: 1. 在文件管理器中,通常可以在"网络"或"连接到服务器"等处,输入 smb://你的服务器IP地址。 2. 或者,使用命令行工具 smbclientbash smbclient //服务器IP/User1 -U user1

常用信息

  #可以收官了,1k小文件1G传输速度60M/S浮动,大文件大概20个体积250M传输速度110M/S浮动。
windows电脑映射到,输入IP+路径 \\192.168.0.30\User1 登录对应的账密即可进行登录操作,支持多用户。
liunx测试连接性
smbclient //192.168.0.30/User1 -U user1

近期移植的windows映射      \\192.168.0.3\user1     账密 user1 user1
#\\192.168.0.3:139\user1
#\\192.168.0.3:445\user1

#\\samba.clxr-25.top\user1

🔧 五、日常维护与管理

  • 服务管理

    • 停止服务docker-compose down
    • 重启服务docker-compose restart
    • 查看服务状态docker-compose ps
  • 更新Sambabash # 进入 docker-compose.yml 所在目录 docker-compose down docker-compose pull # 拉取最新镜像 docker-compose up -d

  • 数据备份: 定期备份整个部署目录 (/opt/docker/samba),尤其是 dataconfig 子目录,其中包含了你的共享文件和Samba配置。

  • 添加新用户

    1. docker-compose.ymlcommand部分,参照格式添加一个新的 -u "新用户名;新密码"
    2. config/smb.conf文件中,参照[User1]的格式,为新增用户创建一个新的共享目录配置段。
    3. 在宿主机的./data目录下,创建对应的用户文件夹(例如user3),并确保权限正确。
    4. 执行 docker-compose restart 重启服务使配置生效。

🐛 六、常见问题排查 (FAQ)

问题现象 可能原因与解决方法
无法访问共享 1. 检查防火墙/安全组是否放行了 445和139端口
2. 确认容器是否正常运行:docker-compose ps
3. 查看容器日志:docker-compose logs samba
提示"无法连接"或"密码错误" 1. 确认输入的用户名和密码与docker-compose.yml-u参数定义的完全一致。
2. 检查smb.confvalid users字段是否正确指定了相应用户。
可以连接但无法写入文件 1. 检查宿主机上对应的用户目录(如./data/user1)的权限,确保Samba容器有写入权限。可以尝试 chmod 755 ./data/user1
2. 确认smb.conf中对应共享的 read only 设置为 no
Windows下提示"不允许一个用户使用多个用户名..." 这是Windows的凭据缓存问题。到"控制面板" > "凭据管理器" > "Windows凭据"中,删除之前保存的此服务器的登录凭据,然后重新连接。

希望这份教程能帮助你顺利完成Samba的部署!享受跨平台文件共享带来的便利吧!如果在部署过程中遇到问题,可以参考Samba的官方文档或在相关技术社区寻求帮助。