V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qsnow6
V2EX  ›  NAS

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

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

    胜在一个简单高效,比较符合在浏览器内的使用习惯,不用新开一个导航页。
    第 2 条附言  ·  304 天前
    如果希望一个域名下管理所有服务,并且也在使用 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  
       305 天前 via Android
    换成域名,用 nginx 反向代理
    dier
        2
    dier  
       305 天前   ❤️ 1
    所有服务前面再套个 nginx ,用服务来定义域名进行区分,例如 tv.domain.com music.domain.com photo.domain.com
    BeautifulSoap
        3
    BeautifulSoap  
       305 天前 via Android
    1. 用 nginx-proxy 自动为每个服务绑定个子域名。这样从记端口变成记域名了会不会边好记不一定
    2. 写个静态网页当黄页

    不知道有没有更好办法
    Puteulanus
        4
    Puteulanus  
       305 天前   ❤️ 3
    Navee
        5
    Navee  
       305 天前
    traefik 反向代理
    DenseHazy
        6
    DenseHazy  
       305 天前   ❤️ 1
    xuanyuanaosheng
        7
    xuanyuanaosheng  
       305 天前
    自己搞一个书签管理服务,记录所有的服务
    my3157
        8
    my3157  
       305 天前
    冷知识: docker 网络是可以直接桥接物理网卡的

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

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

    大概看了楼上各位兄弟提供的解决方案,感觉导航页是个比较不错的解决方案。
    shenjinpeng
        20
    shenjinpeng  
       305 天前
    P.S. 可以选择使用以下域名后缀

    .local

    .private

    .intranet

    .internal

    .lan
    yanhuijun1996
        21
    yanhuijun1996  
       305 天前
    推荐一手 https://github.com/soulteary/docker-flare

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

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

    .test
    .example
    .invalid
    .localhost

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

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