V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
qsnow6
V2EX  ›  NAS

如何管理 NAS 中各种 Docker 容器的端口?

  •  
  •   qsnow6 · 2023-06-27 13:52:45 +08:00 · 7071 次点击
    这是一个创建于 549 天前的主题,其中的信息可能已经有所发展或是发生改变。
    家用 NAS 上了一堆容器,用起来是很爽,但是各种容器开的端口多了后,很难记住,只能扔到浏览器的收藏夹里,有没有更便捷的管理方式?
    第 1 条附言  ·  2023-06-28 09:55:36 +08:00
    最终我采用的方案是通过书签来保存网址,命名好每个书签的名字,例如:home-{service name},要访问的时候在浏览器的地址栏输入 home+空格+服务名称,按 Tab 就自动补全网址了。

    胜在一个简单高效,比较符合在浏览器内的使用习惯,不用新开一个导航页。
    第 2 条附言  ·  2023-06-28 17:33:22 +08:00
    如果希望一个域名下管理所有服务,并且也在使用 tailscale 的话,我再提供个解决方案:
    使用 tailscale funnel 转发局域网内的服务,可以自带 https ,还可以控制是否可以在外部访问:
    https://tailscale.com/kb/1247/funnel-serve-use-cases/#use-serve-to-bind-local-services-to-your-tailnet
    66 条回复    2023-06-29 12:48:17 +08:00
    bkmi
        1
    bkmi  
       2023-06-27 13:57:31 +08:00 via Android
    换成域名,用 nginx 反向代理
    dier
        2
    dier  
       2023-06-27 13:57:33 +08:00   ❤️ 1
    所有服务前面再套个 nginx ,用服务来定义域名进行区分,例如 tv.domain.com music.domain.com photo.domain.com
    BeautifulSoap
        3
    BeautifulSoap  
       2023-06-27 13:57:33 +08:00 via Android
    1. 用 nginx-proxy 自动为每个服务绑定个子域名。这样从记端口变成记域名了会不会边好记不一定
    2. 写个静态网页当黄页

    不知道有没有更好办法
    Puteulanus
        4
    Puteulanus  
       2023-06-27 14:00:05 +08:00   ❤️ 3
    Navee
        5
    Navee  
       2023-06-27 14:01:03 +08:00
    traefik 反向代理
    DenseHazy
        6
    DenseHazy  
       2023-06-27 14:03:08 +08:00   ❤️ 1
    xuanyuanaosheng
        7
    xuanyuanaosheng  
       2023-06-27 14:04:00 +08:00
    自己搞一个书签管理服务,记录所有的服务
    my3157
        8
    my3157  
       2023-06-27 14:08:56 +08:00
    冷知识: docker 网络是可以直接桥接物理网卡的

    手动建立个网桥, 桥接到物理网卡上, IP 段使用和物理网卡同网段, 每个容器都有自己的 IP , 可以直接访问
    qsnow6
        9
    qsnow6  
    OP
       2023-06-27 14:45:50 +08:00
    @Puteulanus 这个不错,顺便还解决了密码记录的问题
    qsnow6
        10
    qsnow6  
    OP
       2023-06-27 14:46:29 +08:00
    @BeautifulSoap
    > 1. 用 nginx-proxy 自动为每个服务绑定个子域名。这样从记端口变成记域名了会不会边好记不一定
    哈哈哈哈,确实是,从记端口变成记域名,好像也没差
    zx900930
        11
    zx900930  
       2023-06-27 14:52:03 +08:00   ❤️ 1
    https://dashy.to/
    个人认为这个比 heimdall 用起来舒服
    lianyanjiajia
        12
    lianyanjiajia  
       2023-06-27 14:55:10 +08:00
    @zx900930 heimdall 有密码啊,还可以域名一键登录
    fo83rf5ma9gi1
        13
    fo83rf5ma9gi1  
       2023-06-27 14:57:30 +08:00   ❤️ 4
    viakiba
        14
    viakiba  
       2023-06-27 15:07:01 +08:00   ❤️ 1
    AmoxiDu
        15
    AmoxiDu  
       2023-06-27 15:09:37 +08:00   ❤️ 2
    导航页的话,推荐一手 Hommar 。比 heimdall 轻量一点。
    https://zhuanlan.zhihu.com/p/610754572
    picone
        16
    picone  
       2023-06-27 15:10:30 +08:00
    我是自己手写 docker-compse.yaml ,使用 docker compose 启停各种容器。
    qsnow6
        17
    qsnow6  
    OP
       2023-06-27 15:16:22 +08:00
    @fo83rf5ma9gi1 页面很 geek
    zx900930
        18
    zx900930  
       2023-06-27 15:18:20 +08:00
    @lianyanjiajia #12 用 traefik 的 middleware.
    比 heimdall 自带的强大得多, SSO, MFA, 可以和域控制器 Radius 之类的鉴权平台集成. 而且可以应用到全内网的服务上.

    heimdall 最难受的就是那个界面自定义起来太麻烦了, 而且用久了应用一多, heimdall 的应用没分类你就找不到你想要的应用了.
    qsnow6
        19
    qsnow6  
    OP
       2023-06-27 15:19:09 +08:00
    @picone 没有放弃 docker compose 啊,只是服务多了,端口很难管理。

    大概看了楼上各位兄弟提供的解决方案,感觉导航页是个比较不错的解决方案。
    shenjinpeng
        20
    shenjinpeng  
       2023-06-27 15:20:32 +08:00
    P.S. 可以选择使用以下域名后缀

    .local

    .private

    .intranet

    .internal

    .lan
    yanhuijun1996
        21
    yanhuijun1996  
       2023-06-27 15:28:02 +08:00
    推荐一手 https://github.com/soulteary/docker-flare

    非常轻量,响应快,简洁上面介绍的大多用过,还是有点大。
    JayZXu
        22
    JayZXu  
       2023-06-27 15:28:41 +08:00
    portainer 里面直接点端口跳转。
    很多服务利用率不高,没必要配域名也没必要加书签
    还是 portainer 简单无脑
    qsnow6
        23
    qsnow6  
    OP
       2023-06-27 15:29:07 +08:00
    @shenjinpeng 那不是还要维护 DNS ?
    lyxeno
        24
    lyxeno  
       2023-06-27 15:48:14 +08:00
    我感觉书签很好用,反正能通过书签名能检索。
    yuhangch
        25
    yuhangch  
       2023-06-27 15:51:13 +08:00
    cloudflare tunnel 优点是安全,缺点是慢
    solodxg
        26
    solodxg  
       2023-06-27 16:04:35 +08:00
    看服务变化 和对各服务状态数据 需求情况,如果服务相对固定 那就 heimdall ,如果对服务有一些数据查看和简单控制需求,同时还想加一些外部收藏夹之类的 建议 homepage, 就是 homepage 需要编辑 yml 文件 灵活度高 也美观 但是配置起来麻烦一些
    lihang1329
        27
    lihang1329  
       2023-06-27 16:32:06 +08:00
    ByteCat
        28
    ByteCat  
       2023-06-27 16:53:40 +08:00
    我现在都用 Traefik ,写好标签,自己会申请证书,很方便
    HangoX
        29
    HangoX  
       2023-06-27 17:22:10 +08:00
    不用端口管理,容器不要暴露端口,直接走 docker 内网,docker 给每个容器分配内部域名,通过 nginx 反向代理这个域名即可。即使容器端口一样,容器名字不同,就不会冲突
    riggzh
        30
    riggzh  
       2023-06-27 17:23:38 +08:00
    以群晖为例,自带的 Web Station 就是个带 UI 的 Nginx ,可以配置
    sundev
        31
    sundev  
       2023-06-27 17:46:52 +08:00
    macvlan bridge 网络,这样的话每个容器可以有 IP 地址,这样端口不冲突
    vmebeh
        32
    vmebeh  
       2023-06-27 17:48:51 +08:00 via iPhone
    反代一下再顺手做个导航页
    dropdatabase
        33
    dropdatabase  
       2023-06-27 19:00:01 +08:00
    @HangoX 找了下 没找到你说的这个内部域名。请教下 怎么查看呢?
    kuawo
        34
    kuawo  
       2023-06-27 19:17:24 +08:00
    能看看大佬 docker 里有哪些好东西吗
    allence
        35
    allence  
       2023-06-27 21:02:53 +08:00
    服务多了绑域名也无济于事,以前也是收藏夹解决,现在用[Material Design New Tab]( https://chrome.google.com/webstore/detail/material-design-new-tab/kgfodmcknjlgkbgkkafogbdaibkfgdgo)感觉良好
    waltcow
        36
    waltcow  
       2023-06-27 21:06:04 +08:00 via iPhone
    traefik Portainer
    waltcow
        37
    waltcow  
       2023-06-27 21:09:07 +08:00 via iPhone
    EricXuu
        38
    EricXuu  
       2023-06-27 21:14:39 +08:00
    域名肯定比端口好记多了,就服务名作前缀,这有啥记不住的
    honmaple
        39
    honmaple  
       2023-06-27 21:23:55 +08:00
    Nginx Proxy Manager + AdGuard ,把 Docker 里暴露出去的 HTTP 端口收回去,全部使用域名访问,记得部署到同一网络,然后在 Proxy Host 里使用 http://[docker 名称]:[docker 端口],比如 http://alist:5244

    上面说的导航页我也部署了一个,但除了好看点没啥用,不如直接进 Nginx Proxy Manager
    wchluxi
        40
    wchluxi  
       2023-06-27 21:32:55 +08:00
    用 homepage 写个个人导航页,将服务挂上去。还能看到容器状态。
    wgsgyes
        41
    wgsgyes  
       2023-06-27 21:40:55 +08:00
    @qsnow6 是指定网络为 macnet 模式吗?好像只能指定一个容器,第二个 docker 指定为 macnet 时就冲突了
    lovelylain
        42
    lovelylain  
       2023-06-27 22:06:28 +08:00 via Android
    你们没有内网穿透在外网访问的需求吗?我最开始也是在 nginx 里配置域名,但是域名多了也记不住。后来用 panel_iframe 配置到 homeassistant 的侧边栏,不常用的用 weblink 做成链接。但是直接以域名暴露到外网,要想安全就得设置密码,输密码我嫌麻烦,所以整了个 ha 的反代插件,由 ha 来反代服务,这样我只需要给 HA 配置域名就行了,其他服务通过 HA 侧边栏或链接访问,能免密免登录的都尽量免登录。
    mu2er
        43
    mu2er  
       2023-06-27 22:49:09 +08:00 via Android
    试过 heimdall/flare/homarr ,flare 感觉最简洁; homarr 最花里胡哨,而且可以通过右上角 docker 查看所有 docker 的端口信息。
    后来发觉用的最多的还是 portainer 。
    bao3
        44
    bao3  
       2023-06-27 23:04:02 +08:00
    群晖好用,就是因为它自带了反向代理,你只要在你的有域名里,设置一个通用域名 *.域名.后缀 ,然后你就可以在反射代理里,随机起一个域名、对应到 docker 端口上,就可以了。不必每次去管理域名,超级方便
    lijiji
        45
    lijiji  
       2023-06-27 23:04:55 +08:00
    @my3157
    冷知识
    端口:难记
    子域名:难记
    独立 IP:好输又好记
    moxuanyuan
        46
    moxuanyuan  
       2023-06-27 23:26:07 +08:00   ❤️ 1
    @shenjinpeng #20 建议用

    .test
    .example
    .invalid
    .localhost

    不然浏览器不会识别为网址
    hanguofu
        47
    hanguofu  
       2023-06-28 04:26:22 +08:00
    请问 heimdall 能不能自动处理 内网外网双地址切换 ? 我在 heimdall 所在的机器上部署了一些服务,希望能从外网或者 内网访问 heimdall 的导航页 ,都能无缝地切换到这些服务上。麻烦大家推荐一下,谢谢~
    qsnow6
        48
    qsnow6  
    OP
       2023-06-28 09:05:49 +08:00
    @hanguofu 这种情况建议用 tailscale 维护下 DNS
    qsnow6
        49
    qsnow6  
    OP
       2023-06-28 09:10:09 +08:00
    @moxuanyuan 除了 localhost 这几个地址通过 PING 访问,并没有环回啊
    asdasdqqq
        50
    asdasdqqq  
       2023-06-28 09:34:26 +08:00
    最好用的还是浏览器收藏夹
    qsnow6
        51
    qsnow6  
    OP
       2023-06-28 09:42:19 +08:00
    @asdasdqqq 我也发现了,命名好书签的名字 [home-xxxx] ,在地址输入 home+空格+服务名字就出来了。
    胜在简单、高效。
    moxuanyuan
        52
    moxuanyuan  
       2023-06-28 10:40:41 +08:00
    @qsnow6 #49 你那会用 nas ,难度不会在 router 或者本机设置 Hosts 文件 吗?
    anonex
        53
    anonex  
       2023-06-28 10:53:04 +08:00 via Android
    创建 macvlan 给容器分配独立 IP, Web 端口通通改成 80 ,使用保留域名 .local .home 啥的绑定 IP , 路由器设置静态 DNS 。
    qsnow6
        54
    qsnow6  
    OP
       2023-06-28 11:34:16 +08:00
    @moxuanyuan 我的意思是维护成本的问题,需要额外维护一个 DNS
    tangtang369
        55
    tangtang369  
       2023-06-28 15:45:05 +08:00
    其实感觉你需要的只是一个自定义的导航页面 强烈不建议乱映射端口到域名或者是公网上 nas 被别人当成肉鸡都不知道
    qsnow6
        56
    qsnow6  
    OP
       2023-06-28 15:52:30 +08:00
    @anonex 浏览器好像默认不解析.home
    MSIAM
        58
    MSIAM  
       2023-06-28 17:22:26 +08:00
    为什么都在想着做反代?
    我直接反手建个专门的虚拟网桥。给每个 Docker 容器绑一个独有 IP ,结束
    MSIAM
        59
    MSIAM  
       2023-06-28 17:23:06 +08:00
    有了独立 IP ,就可以直接通过路由器写解析的形式来访问了。
    abc8678
        60
    abc8678  
       2023-06-28 20:32:05 +08:00 via Android
    我在 OpenWrt 上也有一堆端口,有时候会忘。恩山搜到一个路由器界面内的网址导航插件,自己加书签。这样就可以在不同设备上使用了
    anonex
        61
    anonex  
       2023-06-28 21:16:37 +08:00
    @qsnow6 可以解析, 域名最后加上 /, 就能识别为网址
    IV16SL
        62
    IV16SL  
       2023-06-28 22:25:56 +08:00
    书签就行了,而且现在浏览器不是都自动填充了吗,不要把简单问题复杂化。
    hanai
        63
    hanai  
       2023-06-28 23:29:22 +08:00 via iPhone
    @qsnow6 mdns 就行
    CHEN1016
        64
    CHEN1016  
       2023-06-29 08:16:34 +08:00 via iPhone
    https://homarr.dev/ 可以设置内外网地址,还挺方便的
    mabutou
        65
    mabutou  
       2023-06-29 11:09:18 +08:00
    Traefik 配置服务发现,不用暴露端口。
    julyclyde
        66
    julyclyde  
       2023-06-29 12:48:17 +08:00
    个人建议,容器用 network=host 模式运行
    这样直接用 lsof -i 就能看到端口对应的程序

    默认的 nat 模式是没办法这么看的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 06:27 · PVG 14:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.