群晖容器使用不了80端口?macvlan来帮你忙
由于群晖DSM系统本身占用了一些端口,我们用群晖的docker部署容器的时候会发现它绑定不上一些特定的端口,比如80以及5000端口。那么有没有办法让docker使用这些端口呢?答案是有的,只不过稍微有些麻烦,无法直接通过DSM设置,需要使用ssh工具登录到群晖输入命令来创建macvlan网络和创建容器。
什么是macvlan?
关于这个问题,ChatGPT是这么回复的:
macvlan是一种 Linux 网络虚拟化技术,它允许在同一物理网络接口上创建多个虚拟接口,并为每个虚拟接口分配唯一的 MAC 地址。这种技术通常用于容器化环境中,以便容器能够拥有自己的独立网络标识。
具体来说,macvlan允许多个虚拟接口共享同一物理网络接口,并且每个虚拟接口的 MAC 地址是唯一的,这样它们在网络上可以被视为独立的设备。这为容器提供了一种更接近于直接连接到物理网络的方式,而不需要通过 Network Address Translation (NAT) 等手段。
主要步骤
1. 群晖开启SSH登录功能、开启网卡的Open vSwitch
在控制面板里面启用SSH功能
2. 创建macvlan网络
群晖开启ssh功能后,用ssh客户端软件比如putty、xshell去连接,账号密码为群晖的管理员账号密码
putty登陆成功后,切换为root用户(不切换的话找不到docker命令)
sudo -i
输入下面的命令来创建macvlan网络,执行该命令后,在docker里创建一个名为macvlan1的macvlan网络,它的地址范围是192.168.31.128 - 192.168.31.255,网关192.168.31.1
docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 --ip-range=192.168.31.128/25 -o parent=eth1 macvlan1
如果不小心创建错了,或者想修改地址范围,可以删除这个网络重新创建
docker network rm macvlan1
创建后,回到dsm docker,可以看到创建好的网络

创建容器
虽然界面上能够显示出这个容器了,创建容器时也能够选择macvlan1了,但是还是要使用命令行来创建容器,因为在界面上创建容器没有办法指定ip地址。以下是创建adguardhome容器的范例,创建好后,adguardhome里面再把匿名化客户端IP选项关掉就可以获取到客户端的真实ip了。你也可以创建nginx容器绑定80端口用来假设内网网站,不一一列举了。
docker run -d --name=adguardhome --net=macvlan1 --ip=192.168.31.253 --restart=always adguard/adguardhome:latest

wsxxqnss
校验提示文案
wsxxqnss
校验提示文案
wsxxqnss
校验提示文案
wsxxqnss
校验提示文案