Skip to content

Docker 部署

这页适合谁

如果你不是通过普通飞牛应用安装,而是希望用 Docker 运行 敲门 knock,这页是更合适的入口。

它覆盖两种形态:

  • 直接使用 Docker Compose 部署
  • 在飞牛里安装 Docker 版 FPK,由向导生成 Compose 配置

这两种形态和普通飞牛应用最大的差异是:

  • Docker 版自带 Redis 容器
  • 管理后台入口端口通常不是 7998
  • Docker 下有些依赖宿主机能力的功能会受限

先记住 Docker 版端口

Docker Compose 默认端口

端口作用是否暴露到宿主机
7991管理后台入口
7999网关 / 代理入口
7998管理后端内部端口
7997认证前端内部端口
7996Go 管理内部端口
6379Redis否,仅 Compose 网络内部使用

普通飞牛应用里你常看到的是:

  • 7998 管理后台入口
  • 7999 统一访问入口

但 Docker 版为了让管理面板和内部后端隔离,默认把管理后台入口放在:

  • 7991

飞牛 Docker FPK 默认端口

飞牛 Docker 版向导里默认是:

端口作用
7991管理后台入口
8999Go 代理入口
7998管理后端内部端口
7997认证前端内部端口
7996Go 管理内部端口

也就是说,如果你用的是飞牛 Docker 版 FPK,对外验证网关时不要只盯着 7999,要看安装向导里 Go 代理入口端口 最终填的是不是 8999

Docker Compose 最小部署流程

1. 准备目录

bash
mkdir -p /opt/fn-knock-docker
cd /opt/fn-knock-docker

2. 准备 .env

dotenv
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-knock
  • redis

并且只需要对宿主机开放:

  • 管理后台入口
  • 网关入口

业务数据会保存到卷:

  • fn_knock_data
  • fn_knock_gateway
  • fn_knock_redis

4. 启动

bash
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-For
  • X-Real-IP

如果第三方反代无法让系统自动识别宿主机局域网地址,可以再用:

  • DOCKER_DISCOVER_LAN_IP

作为一键发现本地服务时的兜底。

Docker 版的能力边界

Docker 版适合快速部署统一网关,但不是所有宿主机能力都天然可用。

下面这些能力要特别留意:

  • 自动 HTTPS:通常不适合 Docker 部署,因为它需要直接监听宿主机 80
  • SSH 安全:通常不可用,因为它依赖读取宿主机 SSH 日志和操作宿主机防火墙
  • 自动处理系统防火墙:Docker 环境下不一定具备完整宿主机防火墙管理能力
  • 直连模式依赖防火墙放行模型,Docker 下通常更建议优先评估子域模式或反代模式

如果你的核心目标是 Web 服务公网访问,Docker 版也仍然建议优先从:

里选择路线。

Docker 版升级

如果使用 latest 镜像,升级通常是:

bash
docker compose pull
docker compose up -d

如果你固定了版本号,需要先改 .env 里的:

dotenv
FN_KNOCK_IMAGE=kcilnk/fn-knock:<version>

再执行同样的启动命令。

常见误区

误区一:Docker 版也一定从 7998 进后台

不是。

Docker Compose 默认管理后台是 79917998 在 Docker 版里通常是容器内部的管理后端端口。

误区二:飞牛 Docker FPK 的网关入口一定是 7999

也不是。

飞牛 Docker FPK 向导默认 Go 代理入口是 8999。实际以安装向导保存的端口为准。

误区三:容器内的 127.0.0.1 就是宿主机

不是。

容器里的 127.0.0.1 指的是容器自己。如果目标服务跑在宿主机或其他容器,需要使用宿主机可达地址、同一 Docker 网络内服务名,或明确的局域网 IP。

相关阅读

QQ群:1081609274