Samba 是类Unix下的 Windows文件共享
服务,本文将以Debian为例介绍Samba在Docker环境下的快速部署和不为人知的使服务快速被发现.
安装 Docker 🔗︎
快速搜索Linux常用环境标准部署文档, 如谷歌搜关键字: site://www.digitalocean.com debian install docker
, do的文档足够参考.
Docker 快速部署Samba 🔗︎
1
|
docker pull dperson/samba
|
将 /我的/共享文件夹路径
替换为你本机预报做共享的路径, 此方法将开启一个匿名可登录和读写的共享路径: public
1
2
3
4
5
6
7
8
|
docker run -d --name samba -p 139:139 -p 445:445 \
-v /我的/共享文件夹路径:/data \
--restart=always \
dperson/samba \
-s "public;/data;yes;no" \
-p
# --restart=always 参数将使该容器随系统启动
|
其他高级的带验证的方法就不讨论, 靠大家自己在 dperson/samba
的文档里摸索. 此镜像支持的Samba功能非常齐全, 认真阅读文档即可实现各种复杂的共享设置.
后面的内容可能毫无意义
使服务快速被发现 🔗︎
由于Windows和类Unix(包括苹果安卓)服务发现协议不同, 要实现使服务快速被发现, 必须分别依赖
wsdd2
和
avahi
.
1
|
# wsdd2 的编译和安装 写起来太麻烦, 也可以直接下源码 make 也行, 遇到问题大家先谷歌搜索
|
1
|
apt-get install avahi-daemon
|
假如我们把 wsdd2 安装到 /usr/sbin/wsdd2
的路径下,
vi /etc/systemd/system/wsdd2.service
# 该配置内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[Unit]
Description=WSD/LLMNR Discovery/Name Service Daemon
#BindsTo=smbd.service
[Service]
ExecStart=/usr/sbin/wsdd2
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
DynamicUser=true
AmbientCapabilities=CAP_NET_RAW
PrivateTmp=true
PrivateDevices=true
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
|
1
2
3
|
systemctl daemon-reload
systemctl enable wsdd2
systemctl restart wsdd2
|
vi /etc/avahi/services/samba.service
# 该配置内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_smb._tcp</type>
<port>445</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=RackMac</txt-record>
</service>
</service-group>
|
1
2
|
systemctl enable avahi-daemon
systemctl restart avahi-daemon
|
运行 wsdd2 和 avahi 后, 你的Samba服务就能在Windows网上邻居和苹果局域网共享、以及VLC本地网络发现等环境下第一时间就被自动搜索到。
卸载方法 🔗︎
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 卸载 wsdd2
systemctl stop wsdd2
rm -f /usr/sbin/wsdd2 \
/etc/systemd/system/wsdd2.service
# 卸载 avahi-daemon 的 samba.service
rm -f /etc/avahi/services/samba.service
systemctl restart avahi-daemon
# 卸载 Docker 容器和镜像
docker stop samba
docker rm samba
docker rmi dperson/samba
|