无需公网 IP!这款开源神器让你本地 Docker 服务也能秒变全球访问

Posted by Mike on 2025-04-21

嘿,兄弟们!今天得跟你们安利一个让我心动到飞起的 GitHub 开源项目 —— DockFlare!如果你跟我一样,爱折腾技术,或者正为怎么把本地的 Docker 服务安全扔到公网上抓耳挠腮,这玩意儿绝对是你的救星!

作为一个用过一堆开源工具的老油条,我得说,DockFlare 简直是 “懒人福音”,用起来爽到炸!来,跟我一起看看这家伙有多牛,聊聊我的上手心得,顺便教你怎么玩得转!

DockFlare 是个啥?

DockFlare 是个基于 Docker 和 Cloudflare Tunnel 的开源小宝贝,专门帮你把跑在 Docker 容器里的服务,轻轻松松暴露到公网上。

啥意思?简单说,它就像个 “公网搬运工”,把你本地的服务通过 Cloudflare 的隧道(Tunnel)映射出去,还能自动搞定 DNS 记录,省得你手动折腾一堆配置。

我第一次发现 DockFlare,感觉就像捡到宝!以前用 Cloudflare Tunnel,我得自己登录仪表盘,手动点来点去,稍不留神就出错。现在有了 DockFlare,基本就是 “设几个参数,贴个标签,跑起来”,服务嗖一下就上线了,简直是 “懒人梦想” 成真!

核心功能:DockFlare 能干啥?

DockFlare 的功能用四个字形容:简单又强悍!咱们来拆解一下它的几个亮点。

  1. 自动搞定 Cloudflare 隧道

DockFlare 跟 Cloudflare 的隧道(Cloudflare Tunnel)无缝对接。你不需要手动去 Cloudflare 仪表盘创建隧道,DockFlare 会自动帮你搞定。它能根据你的 Docker 容器配置,动态创建、更新或删除隧道入口。换句话说,你启动一个新容器,DockFlare 立马帮你生成一个公网可访问的地址。

我试着用它跑了一个简单的 Nginx 容器,配置好后,几分钟内就拿到了一个 https://my-service.example.com 的公网地址。整个过程顺滑得让我有点不敢相信!

  1. 靠 Docker 标签玩转 DNS

DockFlare 的绝活儿是能根据 Docker 容器的标签(Label),自动在 Cloudflare 上创建或更新 DNS 记录。比如,你有个容器跑了个小博客,想用 blog.example.com 访问,只需要在容器上贴个标签,DockFlare 立马帮你把域名指向隧道,丝滑到不行!

想换域名?改个标签就行,完全不用碰 Cloudflare 仪表盘。这种“标签驱动”的设计让我觉得特别优雅,省去了手动配置的繁琐。

  1. 多域名、多区域随便玩

DockFlare 不光支持一个主域名(Zone),还能通过标签指定不同的 Cloudflare Zone。啥意思?就是你可以用一个 DockFlare 实例,管好多个域名下的服务。比如,我有个个人网站用 example.com,还有个测试项目用 test.com,DockFlare 都能一手抓!

我的小经验:多区域功能对多项目选手太香了。不过得注意,API Token 必须有所有 Zone 的 DNS 编辑权限,不然会报权限不足。我第一次就栽在这儿,哈哈,血泪教训!

  1. 安全又省心

DockFlare 要求使用 Cloudflare 的 API Token,而不是全局 API Key。Token 的权限可以精确控制,比如只允许编辑 DNS 和隧道相关内容。这点让我很安心,毕竟安全第一!另外,Cloudflare 隧道的加密传输也保证了数据安全,哪怕你跑在家里那台老旧 NAS 上,也不用担心暴露风险。

  1. Docker 部署,简单到爆

DockFlare 本身就是个 Docker 镜像,部署起来跟吃个饭一样轻松。拉镜像,配个 .env 文件,跑个 docker run,几分钟就搞定。官方还贴心地扔了个 Docker Compose 示例,复制粘贴,闭眼都能跑!

咋上手?手把手带你飞!

想玩 DockFlare?别急,我给你整了个超接地气的教程,基于官方说明文档和我的实战经验,保证你分分钟跑起来!

  1. 准备 Cloudflare 账号和 API Token

先得有个 Cloudflare 账号,然后去仪表盘整一个 API Token。Token 要这些权限:

  • Account > Cloudflare Tunnel > Edit:允许 DockFlare 在您的帐户内创建、列出和删除 Cloudflare 隧道。
  • Zone > DNS > Edit:允许 DockFlare 在您的区域内创建和删除 DNS 记录(特别是指向您的隧道的 CNAME 记录)。

创建 Token 时,选“All zones from an account”最省心,省得一个个 Zone 去授权。Token 拿好,记下来,后面要用。

小贴士:我建议给 Token 取个好记的名字,比如 DockFlare-Token,免得以后忘了是干啥的。别用全局 API Key,安全性差,容易翻车!

  1. 拉取 DockFlare 镜像

DockFlare 的镜像在 Docker Hub 上,打开终端,敲这行命令:

1
$ docker pull alplat/dockflare

拉完后,用 docker images 瞅一眼,确认镜像到手。我试的时候,镜像大概 60 多 MB,网速 OK 的话一分钟搞定。

  1. 配环境变量

DockFlare 需要几个关键参数,写在 .env 文件里。最小配置长这样:

1
2
3
4
CF_API_TOKEN=你的Cloudflare_API_Token
CF_ACCOUNT_ID=你的Cloudflare账号ID
CF_ZONE_ID=你的主域名Zone_ID
TUNNEL_NAME=期望的隧道名称 # e.g.my-dockflare-tunnel

咋找 ID?登录 Cloudflare,点进你的域名,右边侧边栏有 Account ID 和 Zone ID,复制粘贴就行,别手打,容易出错!

我的血泪史:我有次把 Zone ID 抄错了,DockFlare 死活报错。建议复制后核对一下,省得抓狂。

  1. 跑起来!

用 Docker Compose 跑最省心。我改了官方的例子,贴给你:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '3.8'
services:
cloudflare-tunnel-manager:
image: alplat/dockflare:stable # Pre-built image (currently x86_64/amd64 only)
container_name: dockflare
restart: unless-stopped
ports:
- "5000:5000" # Exposes the Web UI on port 5000
env_file:
- .env
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # Required to monitor Docker events
- dockflare_data:/app/data # Persistent storage for state
networks:
- cloudflare-net
environment:
- STATE_FILE_PATH=/app/data/state.json # Path to state file inside the container
- TZ=Europe/Zurich # Optional: Set your timezone, e.g., America/New_York
volumes:
dockflare_data:
networks:
cloudflare-net:
name: cloudflare-net # Creates/uses a dedicated network for the tunnel

保存成 docker-compose.yml,然后:

1
$ docker-compose up -d

DockFlare 就启动啦!它会自动连上 Docker 的 socket,盯着你的容器。

  1. 给容器贴标签

想让某个容器上公网?给它贴几个标签就行。比如,我有个 Nginx 容器,想用 blog.example.com 访问,配置是这样的:

1
2
3
4
5
6
7
8
9
services:
my-web-app:
image: nginx:latest # Example service
labels:
# --- DockFlare Labels ---
cloudflare.tunnel.enable: "true" # Required: Tells DockFlare to manage this service
cloudflare.tunnel.hostname: "blog.example.com" # Required: Your public hostname
cloudflare.tunnel.service: "http://my-web-app:80" # Required: Internal service URL (use container name/alias and port)
# cloudflare.tunnel.zonename: "other-domain.com" # Optional: Use if hostname is on a different zone than CF_ZONE_ID

跑起来后,DockFlare 自动在 Cloudflare 上搞个 CNAME 记录,指向你的隧道。打开浏览器,输 blog.example.com,你的 Nginx 页面就蹦出来了!

DockFlare 咋用最爽?

DockFlare 用处多得像个宝藏,我分享几个我的玩法,给你点灵感:

  1. 自托管服务,随时随地用

我用 DockFlare 把 Nextcloud(开源网盘)扔到公网,随时访问我的文件。以前得自己配 Nginx 反代,烦得要死。现在贴个标签,DockFlare 全程搞定,安全又省心。

  1. 测试环境,快到飞起

有时候我想给朋友秀个 Demo,比如个前端项目。直接本地跑个 Docker 容器,配上 DockFlare,几分钟就甩个公网链接出去,朋友看得直夸牛!

  1. 家里的小服务器

我家有个 NAS,跑了 Jellyfin(视频流媒体)。用 DockFlare,我把服务安全暴露出去,出门也能看家里的电影,爽到飞起!

避坑指南:别踩这些雷!

DockFlare 好用归好用,但也有几个小坑,我帮你划重点:

  1. API Token 权限要配全:权限不够,DockFlare 会闹脾气。认真看官方说明文档的权限要求,别偷懒。
  2. 网络得稳定:DockFlare 要跟 Cloudflare 聊天,网不稳可能隧道创建失败。我有次断网,隧道挂了,得重启容器。
  3. 标签别写错:标签格式错了,DockFlare 不吭声,但 DNS 不生效。直接抄官方文档的例子,稳。
  4. Cloudflare 免费版够用:DockFlare 用免费 Tunnel 就行,不用花钱买高级版。

总结:DockFlare 香不香?

用了一圈 DockFlare,我只能说,这玩意儿简直是为我这种 “技术懒虫” 量身定制!

它把 Cloudflare Tunnel 的复杂配置简化到 “傻瓜式”,自动化程度高到让我想给作者寄锦旗。无论你是想自托管服务、快速秀个 Demo,还是给家里服务器加个公网门,DockFlare 都能让你省下一堆时间。

如果你跟我一样,爱折腾开源项目,享受那种 “本地服务秒变公网”的快感,DockFlare 绝对值得你花一小时去试试。赶紧去 GitHub 点个 Star(ChrispyBacon-dev/DockFlare),跑起来玩玩,保准你会上瘾!

最后唠唠

写这篇的时候,我又去 GitHub 瞅了眼 DockFlare 的说明文档,感叹作者真是用心,文档写得条理清晰,连我这种 “配置小白” 都能轻松上手。希望我的分享能让你对 DockFlare 有点心动,试试看,说不定它会成为你的“效率小助手”!

你折腾过啥类似的工具?或者跑 DockFlare 有啥好玩的点子?快来留言跟我唠唠,咱们一起在技术坑里打滚!