Docker 部署
这页适合谁
如果你不是通过普通飞牛应用安装,而是希望用 Docker 运行 敲门 knock,这页是更合适的入口。
它覆盖两种形态:
- 直接使用 Docker Compose 部署
- 在飞牛里安装 Docker 版 FPK,由向导生成 Compose 配置
这两种形态和普通飞牛应用最大的差异是:
- Docker 版自带 Redis 容器
- 管理后台入口端口通常不是
7998 - Docker 下有些依赖宿主机能力的功能会受限
先记住 Docker 版端口
Docker Compose 默认端口
| 端口 | 作用 | 是否暴露到宿主机 |
|---|---|---|
7991 | 管理后台入口 | 是 |
7999 | 网关 / 代理入口 | 是 |
7998 | 管理后端内部端口 | 否 |
7997 | 认证前端内部端口 | 否 |
7996 | Go 管理内部端口 | 否 |
6379 | Redis | 否,仅 Compose 网络内部使用 |
普通飞牛应用里你常看到的是:
7998管理后台入口7999统一访问入口
但 Docker 版为了让管理面板和内部后端隔离,默认把管理后台入口放在:
7991
飞牛 Docker FPK 默认端口
飞牛 Docker 版向导里默认是:
| 端口 | 作用 |
|---|---|
7991 | 管理后台入口 |
8999 | Go 代理入口 |
7998 | 管理后端内部端口 |
7997 | 认证前端内部端口 |
7996 | Go 管理内部端口 |
也就是说,如果你用的是飞牛 Docker 版 FPK,对外验证网关时不要只盯着 7999,要看安装向导里 Go 代理入口端口 最终填的是不是 8999。
Docker Compose 最小部署流程
1. 准备目录
mkdir -p /opt/fn-knock-docker
cd /opt/fn-knock-docker2. 准备 .env
FN_KNOCK_IMAGE=kcilnk/fn-knock:latest
TZ=Asia/Shanghai
ADMIN_VIEW_PORT=7991
BACKEND_PORT=7998
AUTH_PORT=7997
GO_BACKEND_PORT=7996
GO_REPROXY_PORT=7999
FN_KNOCK_DOCKER_IPV4_SUBNET=172.30.0.0/16
FN_KNOCK_DOCKER_IPV6_SUBNET=fd42:fb33:7f7a:100::/64
DOCKER_ADMIN_TRUSTED_PROXY_CIDRS=
DOCKER_DISCOVER_LAN_IP=最常改的是:
ADMIN_VIEW_PORT:管理后台入口GO_REPROXY_PORT:网关入口FN_KNOCK_DOCKER_IPV4_SUBNET/FN_KNOCK_DOCKER_IPV6_SUBNET:避免和现有 Docker 网络冲突
3. 准备 Compose
Compose 里应包含两个服务:
fn-knockredis
并且只需要对宿主机开放:
- 管理后台入口
- 网关入口
业务数据会保存到卷:
fn_knock_datafn_knock_gatewayfn_knock_redis
4. 启动
docker compose pull
docker compose up -d
docker compose ps
docker compose logs -f fn-knock启动后默认访问:
- 管理后台:
http://<宿主机IP>:7991 - 网关入口:
http://<宿主机IP>:7999
首次进入管理后台时,会先设置 Docker 管理面板密码。
Docker 版为什么挂载 /proc/1/net
Docker 版会只读挂载:
/proc/1/net:/host/proc/net:ro
主要是为了让容器里的 DDNS 能看到宿主机上的 IPv6 网卡地址。
如果你是公网 IPv6 场景,建议配合:
并优先理解 DDNS 里的:
从公网获取从网卡直接获取
当公网探测到的 IPv6 和宿主机网卡候选地址不一致时,通常更适合改用“从网卡直接获取”并选中宿主机公网 IPv6。
Docker 版管理后台的访问保护
Docker 版默认把管理后台入口当成管理面板看待。
如果你从公网直接访问 ADMIN_VIEW_PORT,可能会被拒绝。
如果你确实要把管理后台挂到可信反向代理后面,需要配置:
DOCKER_ADMIN_TRUSTED_PROXY_CIDRS
并确保反向代理继续透传:
X-Forwarded-ForX-Real-IP
如果第三方反代无法让系统自动识别宿主机局域网地址,可以再用:
DOCKER_DISCOVER_LAN_IP
作为一键发现本地服务时的兜底。
Docker 版的能力边界
Docker 版适合快速部署统一网关,但不是所有宿主机能力都天然可用。
下面这些能力要特别留意:
自动 HTTPS:通常不适合 Docker 部署,因为它需要直接监听宿主机80SSH 安全:通常不可用,因为它依赖读取宿主机 SSH 日志和操作宿主机防火墙自动处理系统防火墙:Docker 环境下不一定具备完整宿主机防火墙管理能力- 直连模式依赖防火墙放行模型,Docker 下通常更建议优先评估子域模式或反代模式
如果你的核心目标是 Web 服务公网访问,Docker 版也仍然建议优先从:
里选择路线。
Docker 版升级
如果使用 latest 镜像,升级通常是:
docker compose pull
docker compose up -d如果你固定了版本号,需要先改 .env 里的:
FN_KNOCK_IMAGE=kcilnk/fn-knock:<version>再执行同样的启动命令。
常见误区
误区一:Docker 版也一定从 7998 进后台
不是。
Docker Compose 默认管理后台是 7991。7998 在 Docker 版里通常是容器内部的管理后端端口。
误区二:飞牛 Docker FPK 的网关入口一定是 7999
也不是。
飞牛 Docker FPK 向导默认 Go 代理入口是 8999。实际以安装向导保存的端口为准。
误区三:容器内的 127.0.0.1 就是宿主机
不是。
容器里的 127.0.0.1 指的是容器自己。如果目标服务跑在宿主机或其他容器,需要使用宿主机可达地址、同一 Docker 网络内服务名,或明确的局域网 IP。
