本项目使用 Docker Compose 部署多个 FRPC(Fast Reverse Proxy Client)实例,实现内网穿透服务的高可用性。说明文档全部由ai生成,相关配置文件由本人修改。
在传统的单 FRPC 部署方案中,存在以下问题:
解决方案:通过 Docker 部署多个 FRPC 实例,连接到不同的 FRPS 服务器,实现:
yamlservices:
frps: # 服务名称
container_name: frpc1 # 容器名称(建议修改为有意义的名称)
image: snowdreamtech/frpc:latest # FRPC 镜像(建议指定版本号)
labels:
createdBy: Apps # 标签,用于标识创建者
network_mode: host # 使用宿主机网络(重要!)
restart: always # 容器自动重启策略
volumes:
- ./data/frpc.toml:/etc/frp/frpc.toml # 挂载配置文件
| 配置项 | 说明 | 建议 |
|---|---|---|
container_name | 容器名称,用于标识不同的实例 | 使用有意义的名称,如 frpc-aliyun、frpc-tencent |
image | Docker 镜像 | 建议使用固定版本号,如 snowdreamtech/frpc:0.63.0 |
network_mode: host | 使用主机网络模式 | 必须保持,否则内网穿透无法正常工作 |
restart: always | 自动重启策略 | 保持 always,确保服务持续运行 |
volumes | 配置文件挂载路径 | 根据实际路径调整 |
FRPC 使用 TOML 格式配置文件(新版本已不再使用 INI 格式)。
toml# ============================================
# FRPC 新版 TOML 配置
# ============================================
# ---- 全局配置 ----
serverAddr = "frp.example.com" # FRPS 服务器地址(IP或域名)
serverPort = 7000 # FRPS 服务器端口
auth.method = "token" # 认证方式
auth.token = "your_token_here" # 认证密钥(必须与服务端一致)
# Web 管理界面配置(可选)
webServer.addr = "127.0.0.1" # Web 界面监听地址
webServer.port = 7400 # Web 界面端口(不同实例需使用不同端口)
webServer.user = "admin" # Web 界面用户名
webServer.password = "password" # Web 界面密码
# ---- 代理配置 ----
# TCP 代理示例
[[proxies]]
name = "ssh" # 代理名称(必须唯一)
type = "tcp" # 代理类型:tcp/udp/http/https
localIP = "192.168.1.100" # 本地目标服务器IP
localPort = 22 # 本地目标服务器端口
remotePort = 6000 # 远程服务器映射端口
# HTTP 代理示例
[[proxies]]
name = "web"
type = "http"
localIP = "192.168.1.100"
localPort = 80
customDomains = ["www.example.com"] # 自定义域名
# HTTPS 代理示例
[[proxies]]
name = "web-ssl"
type = "https"
localIP = "192.168.1.100"
localPort = 443
customDomains = ["www.example.com"]
# UDP 代理示例
[[proxies]]
name = "dns"
type = "udp"
localIP = "192.168.1.100"
localPort = 53
remotePort = 6001
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
serverAddr | ✅ | FRPS 服务器地址 | "frp.example.com" 或 "1.2.3.4" |
serverPort | ✅ | FRPS 服务器端口 | 7000 |
auth.method | ✅ | 认证方式 | "token" |
auth.token | ✅ | 认证密钥 | "your_secret_token" |
webServer.addr | ❌ | Web 管理界面地址 | "127.0.0.1" |
webServer.port | ❌ | Web 管理界面端口 | 7400 |
webServer.user | ❌ | Web 界面用户名 | "admin" |
webServer.password | ❌ | Web 界面密码 | "password" |
每个代理配置使用 [[proxies]] 开头,支持以下配置:
| 配置项 | 必填 | 说明 | 适用类型 |
|---|---|---|---|
name | ✅ | 代理名称(唯一标识) | 所有类型 |
type | ✅ | 代理类型 | tcp/udp/http/https/stcp/xtcp |
localIP | ✅ | 本地目标IP地址 | 所有类型 |
localPort | ✅ | 本地目标端口 | 所有类型 |
remotePort | ✅ | 远程映射端口 | tcp/udp |
customDomains | ✅ | 自定义域名(数组) | http/https |
subdomain | ❌ | 子域名 | http/https |
⚠️ 命令格式说明:
本文档使用 Docker Compose V2 的命令格式:
docker compose(带空格)
- ✅ 推荐使用:
docker compose(Docker Compose V2,Docker 内置插件)- ❌ 旧版本:
docker-compose(Docker Compose V1,独立命令行工具)Docker Compose V2 已集成到 Docker CLI 中,无需单独安装。如果你的系统仍使用 V1,建议升级到最新版本的 Docker。
bash# 进入对应目录
cd frpc
# 启动容器(后台运行)
docker compose up -d
# 查看容器日志
docker compose logs -f
# 停止容器
docker compose down
# 重启容器
docker compose restart
bash# 查看所有 FRPC 容器状态
docker ps -a | grep frpc
# 查看特定容器日志
docker logs -f frpc1
# 进入容器内部
docker exec -it frpc1 sh
# 重启所有 FRPC 容器
docker restart $(docker ps -a | grep frpc | awk '{print $1}')
# 停止所有 FRPC 容器
docker stop $(docker ps -a | grep frpc | awk '{print $1}')
# 更新镜像
docker compose pull
docker compose up -d
主备模式
负载均衡模式
地域分布模式
⚠️ 重要提示:
Web 管理端口冲突:每个实例的 webServer.port 必须不同
toml# 实例1
webServer.port = 7400
# 实例2
webServer.port = 7401
# 实例3
webServer.port = 7402
容器名称唯一性:每个容器的 container_name 必须不同
代理名称唯一性:同一 FRPS 服务器上的代理名称不能重复
端口映射冲突:不同实例连接同一 FRPS 时,remotePort 不能重复
配置文件路径:确保 volumes 挂载路径正确
容器无法启动
bash# 查看详细错误信息
docker compose logs
# 检查配置文件语法
docker run --rm -v $(pwd)/frpc.toml:/frpc.toml snowdreamtech/frpc:latest /usr/bin/frpc verify -c /frpc.toml
无法连接 FRPS
serverAddr 和 serverPort 是否正确auth.token 是否与服务端一致端口映射失败
remotePort 在 FRPS 允许范围内network_mode: host 已正确配置配置修改后不生效
bash# 重启容器使配置生效
docker compose restart
bash# 实时查看日志
docker compose logs -f
# 查看最近 100 行日志
docker compose logs --tail=100
# 查看特定时间段日志
docker logs --since="2024-01-01" --until="2024-01-02" frpc1
docker compose 命令格式(而非旧版的 docker-compose)如有问题,请检查:
compose文件及toml配置文件下载地址:蓝奏云
本文作者:口水
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!