群晖容器使用不了80端口?macvlan来帮你忙

2024-01-24 00:00:09 13点赞 71收藏 3评论

由于群晖DSM系统本身占用了一些端口,我们用群晖的docker部署容器的时候会发现它绑定不上一些特定的端口,比如80以及5000端口。那么有没有办法让docker使用这些端口呢?答案是有的,只不过稍微有些麻烦,无法直接通过DSM设置,需要使用ssh工具登录到群晖输入命令来创建macvlan网络和创建容器。


什么是macvlan?

关于这个问题,ChatGPT是这么回复的:

macvlan是一种 Linux 网络虚拟化技术,它允许在同一物理网络接口上创建多个虚拟接口,并为每个虚拟接口分配唯一的 MAC 地址。这种技术通常用于容器化环境中,以便容器能够拥有自己的独立网络标识。

具体来说,macvlan允许多个虚拟接口共享同一物理网络接口,并且每个虚拟接口的 MAC 地址是唯一的,这样它们在网络上可以被视为独立的设备。这为容器提供了一种更接近于直接连接到物理网络的方式,而不需要通过 Network Address Translation (NAT) 等手段。


主要步骤

1. 群晖开启SSH登录功能、开启网卡的Open vSwitch

在控制面板里面启用SSH功能在控制面板里面启用SSH功能管理></a></span>启用Open vSwitch

2. 创建macvlan网络

群晖开启ssh功能后,用ssh客户端软件比如putty、xshell去连接,账号密码为群晖的管理员账号密码

puttyputty

登陆成功后,切换为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,可以看到创建好的网络

群晖容器使用不了80端口?macvlan来帮你忙
  1. 创建容器

虽然界面上能够显示出这个容器了,创建容器时也能够选择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

展开 收起
3评论

  • 精彩
  • 最新
  • parent=eth1 macvlan1这个地方要改成parent=eth0.1 macvlan1

    校验提示文案

    提交
    可能和系统版本有关系,我这边是eth0

    校验提示文案

    提交
    收起所有回复
  • 支持支持

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
71
扫一下,分享更方便,购买更轻松