Henry
发布于 2025-10-12 / 3 阅读
0
0

Samba - Docker 部署 - guest

背景简介

简易部署 samba 共享服务。

前置信息

  1. 系统:Ubuntu 22.04
  2. Docker 28.0.1

详细步骤

第一步: 准备一个临时的 guest 配置

  • 例如: smb.conf
[global]
        map to guest = Bad User
        log file = /var/log/samba/%m
        log level = 1
        server role = standalone server
        # 启用用户共享
        usershare allow guests = yes
        usershare max shares = 100
        usershare path = /var/lib/samba/usershares
        usershare owner only = yes
        usershare prefix allow list = /
        usershare prefix deny list =

[guest]
        # 匿名共享配置
        path = /shared/guest/
        writable = yes
        guest ok = yes
        guest only = yes
        # 确保创建的文件/目录权限正确
        create mode = 0777
        directory mode = 0777
        # 可选:允许客户端缓存
        vfs objects = acl_xattr
        map acl inherit = yes
        store dos attributes = yes

第二步: 准备一个supervisord 配置

  • 例如:supervisord.conf
[supervisord]
nodaemon=true

[program:smbd]
command=/usr/sbin/smbd --foreground --no-process-group
autostart=true
autorestart=true
startsecs=5
stderr_logfile=/var/log/supervisor/smbd.err.log
stdout_logfile=/var/log/supervisor/smbd.out.log

第三步:  准备 Dockerfile

# 使用指定 ubuntu 镜像
FROM ubuntu:noble-20250529

# 设置环境变量,避免交互提示
ENV DEBIAN_FRONTEND=noninteractive

# 更新软件源并安装 Samba
RUN apt-get update && apt-get install -y acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle chrony supervisor && rm -rf /var/lib/apt/lists/*

# 配置 Samba 共享目录
RUN mkdir -p /shared/guest && chown -R nobody:nogroup /shared/guest && chmod 777 /shared/guest

# 暴露 Samba 使用的端口
EXPOSE 139 445

# 复制自定义的 smb.conf 配置文件到容器中
COPY smb.conf /etc/samba/smb.conf

# 复制 supervisord 配置文件
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 启动 supervisord
CMD ["/usr/bin/supervisord"]

需持久化的信息:

  • 配置文件: /etc/samba/smb.conf
  • Samba LDB 和 TDB 数据库: /var/lib/samba
  • 共享目录: /shared
  • supervisord log 目录: /var/log/supervisor/

第四步: 创建 Docker 镜像

$ sudo docker build -t pers/samba:1.0.0 .

第五步: 启动 samba 服务

$ sudo docker run -d -p 139:139 -p 445:445 --name samba repo.docker.persys.top/pers/samba:1.3.0
  • 查看容器
$ sudo docker container ls

f93e6c324013   repo.docker.persys.top/pers/samba:1.3.0   "/usr/bin/supervisord"   1 hours ago   Up 40 hours   0.0.0.0:139->139/tcp, [::]:139->139/tcp, 0.0.0.0:445->445/tcp, [::]:445->445/tcp   samba

第六步: 挂载 samba

  • 查看docker 容器 IP
$ sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' samba
172.17.0.3
  • 挂载 samba
$ sudo mount -t cifs //172.17.0.3/guest /mnt/samba_guest -o guest,uid=1000,gid=1000,file_mode=0777,dir_mode=0777
  • 查看挂载信息
$ mount | grep samba
//172.17.0.3/guest on /mnt/samba_guest type cifs (rw,relatime,vers=3.1.1,sec=none,cache=strict,uid=1000,forceuid,gid=1000,forcegid,addr=172.17.0.3,file_mode=0777,dir_mode=0777,soft,nounix,serverino,mapposix,rsize=4194304,wsize=4194304,bsize=1048576,retrans=1,echo_interval=60,actimeo=1,closetimeo=1)

以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。



评论