docker 桥接网络配置samba

刚才想到其实samba也是可以使用docker来管理的,并且可以使用桥接网络,不占用宿主机的端口,于是操作一番成功搭建好了,在此做个记录

创建一个桥接网络:

1
2
3
4
docker network create -d macvlan \
--subnet=192.168.2.0/24 \
--gateway=192.168.2.1 \
-o parent=eth0 physical
  1. 其中macvlan是网络类型
  2. 192.168.2.0/24是子网网段
  3. 192.168.2.1是网关地址
  4. eth0是父网卡
  5. physical是新建出来的网络名称

docker不会使用dhcp client来设定容器的局域网IP地址,而是按照docker网络的subnet参数直接递增分配IP,所以就有可能和局域网的其他主机产生冲突。
解决方法是创建容器时使用--ip=xxx.xxx.xxx.xxx 来手动指定一个内网IP地址,然后在路由器上做好dhcp绑定来防止IP冲突

可以使用--ip-range=192.168.2.128/26 选项来限制docker分配的ip范围,防止和dhcp分配的范围冲突

创建samba容器

先拉取镜像,我这里使用的ARM的samba镜像 docker pull dastrasmue/rpi-samba

然后启动镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -d \
--network=physical \
--restart='always' \
-h 'filer3' \
-v /mnt/data:/share/data \
-v /mnt/backups:/share/backups \
--name filer3 dastrasmue/rpi-samba \
-u "alice:abc123" \
-u "bob:secret" \
-s "Backup directory:/share/backups:rw:alice,bob" \
-s "Alice (private):/share/data/alice:rw:alice" \
-s "Bob (private):/share/data/bob:rw:bob" \
-s "Documents (readonly):/share/data/documents:ro:alice,bob" \
-s "Public (readonly):/share/data/public:ro:"
  1. -u 后面是 用户名:密码 的格式, -s 是 共享名:目录 的格式
  2. -h filer3 hostname,就是网络主机名称,就是在windows网络共享里将会看到的机器名称
  3. --network=physical 中的 physical 就是我们刚才创建的网络名称
  4. 使用桥接网络不需要使用-p 进行端口映射了
  5. --name 之后的行都是容器里面的执行点的参数,而非docker容器启动参数

创建多个samba容器请注意不要使用相同的hostname,否则会导致局域网搜索hostname出现问题,无法使用主机名访问samba