在折腾 Docker 的路上,相信很多朋友和笔者一样,对 Host 网络模式情有独钟。毕竟省去了端口映射的麻烦,网络性能损耗也更低。但是,Host 模式有一个让人头疼的小问题:容易端口打架。

就拿最近在用的 CDT-Monitor 来说,这个工具本身非常不错,但官方 Docker 镜像默认绑定的是 80 端口。如果你的服务器上已经跑了个 Nginx 或者 Apache,直接拉起容器大概率会因为端口冲突而启动失败。

虽然理论上可以去提 Issue 让作者加个环境变量配置,但考虑到维护成本和精力,为了改个端口去打扰原作者实在有点不好意思。于是,笔者决定利用 AI 辅助,自己动手对源码进行了一番“魔改”。

魔改思路与细节

这次修改的核心目标只有一个:让 Docker 镜像在没有官方介入的情况下,支持自定义端口。

  1. 引入 WEB_PORT 环境变量:在 Dockerfile 和启动逻辑中新增了 WEB_PORT 参数。这样一来,即使使用 network_mode: host,我们也能通过 .envdocker-compose.yml 文件随心所欲地指定监听端口(比如 43210),彻底告别 80 端口冲突。

  2. 代码层面的微调:既然动了刀,顺便就借力 AI(MiMo 和 Gemin)对源码进行了一番审计。修复了一些可能导致潜在 BUG 的逻辑,确保魔改版不仅功能增强,稳定性也不能掉队。

  3. 多架构支持:现在的硬件环境五花八门,树莓派、N1、国产 ARM 开发板层出不穷。这次构建特意加入了 AMD64ARM64 双架构支持。Docker Hub 会根据你的机器架构自动拉取对应的镜像,无需手动指定,非常省心。

💡 提示:如果你是使用源码直接部署的大佬,建议还是继续使用官方版本,保持原汁原味的更新体验。本次魔改主要针对 Docker 用户,特别是偏好 Host 模式的朋友。

快速上手

魔改版的镜像已经推送到 Docker Hub,使用起来和官方版一样简单,甚至更灵活。下面是一个典型的 docker-compose.yml 配置示例:

services:
  cdt-monitor:
    image: skytianyu/cdt-monitor:latest
    container_name: cdt-monitor
    restart: always
    # 重点:直接使用 Host 网络,不走 NAT
    network_mode: host
    volumes:
      - ./data:/var/www/html/data
    environment:
      - TZ=Asia/Shanghai
      # 重点:在 Host 模式下自定义端口,避开 80 冲突
      - WEB_PORT=43210

总结

这个小小的改动,解决了很多使用 Host 网络模式用户的痛点。有时候,解决问题的方法不一定要等待上游的更新,自己动手丰衣足食,也是一种技术的乐趣。如果你也有类似的端口冲突烦恼,不妨试试这个方案,体验一下丝滑的自定义端口服务。

(文中代码及修改已提交至 GitHub 仓库,感兴趣的同学可以自行 Review 代码细节。)

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭