背景简介
简易部署 samba 共享服务。
前置信息
- 系统:Ubuntu 22.04
- 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)
以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。