Ultra-lightweight multi-arch image for fatedier/frp - expose local services behind NAT/firewall.
6.6K
一句话:把内网服务“无痛”暴露到公网的最小镜像。
镜像大小 < 20 MB,零依赖,支持 AMD64 / ARM64。
目标:把内网容器 8080 端口映射到公网 28080 端口。
| 节点 | IP 示例 | 角色 |
|---|---|---|
| 公网服务器 A | 1.2.3.4 | frps(服务端) |
| 内网服务器 B | 192.168.1.100 | frpc(客户端) |
bindPort = 7000
auth.token = "REPLACE_ME_WITH_RANDOM_STRING"
docker run -d --name frps \
-p 7000:7000 \
-v $PWD/frps.toml:/etc/frp/frps.toml \
-e FRP_MODE=server \
--restart unless-stopped \
micrograils/frp
serverAddr = "1.2.3.4"
serverPort = 7000
auth.token = "REPLACE_ME_WITH_RANDOM_STRING" # 必须与服务端一致
[[proxies]]
name = "web-8080"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 28080
docker run -d --name frpc \
--network host \
-v $PWD/frpc.toml:/etc/frp/frpc.toml \
-e FRP_MODE=client \
--restart unless-stopped \
micrograils/frp
http://1.2.3.4:28080,即可打开内网服务。| 场景 | 配置入口 |
|---|---|
| 多协议(tcp / udp / http / https / stcp / xtcp) | 参考 frpc_full_example.toml |
| TLS 加密、压缩、负载均衡、Prometheus 监控 | 同上 |
| 自定义 frps 监听地址、Dashboard、子域名 | 参考 frps_full_example.toml |
| 变量 | 默认值 | 说明 |
|---|---|---|
FRP_MODE | 无 | 必填,server 或 client |
FRP_CONF | /etc/frp/frps.toml 或 /etc/frp/frpc.toml | 自定义配置文件路径 |
# 升级镜像(零停机)
docker pull micrograils/frp
docker stop frps && docker rm frps
# 重新执行 docker run … 即可,配置无需改动
auth.token,长度 ≥ 32 位随机字符串。tls.enable = true 并配合防火墙限速。# ---- step 1. download ----
ARG ALPINE_VERSION=3.22
FROM alpine:${ALPINE_VERSION} AS downloader
ARG FRP_VERSION=0.65.0
ARG TARGETARCH
RUN apk add --no-cache ca-certificates curl \
&& curl -fsSL "https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_${TARGETARCH}.tar.gz" \
| tar -xzC /tmp --strip-components=1
# ---- step 2. build ----
ARG ALPINE_VERSION=3.22
FROM alpine:${ALPINE_VERSION}
ARG FRP_VERSION=0.65.0
ENV FRP_VERSION=${FRP_VERSION}
RUN apk add --no-cache ca-certificates tzdata \
&& adduser -D -h /etc/frp -s /sbin/nologin frp
COPY --from=downloader --chown=frp:frp /tmp/frps /tmp/frpc /usr/local/bin/
COPY --from=downloader --chown=frp:frp /tmp/frps.toml /tmp/frpc.toml /etc/frp/
COPY --chown=frp:frp entrypoint.sh /entrypoint.sh
USER frp
WORKDIR /etc/frp
EXPOSE 7000/tcp
ENTRYPOINT ["/entrypoint.sh"]
要点
TARGETARCH,无需手动指定 AMD64/ARM64#!/bin/sh
set -eu
case "${FRP_MODE:-}" in
server) exec /usr/local/bin/frps -c /etc/frp/frps.toml ;;
client) exec /usr/local/bin/frpc -c /etc/frp/frpc.toml ;;
esac
# 未指定 FRP_MODE 时按配置文件存在性推断
if [ -f /etc/frp/frps.toml ] && [ ! -f /etc/frp/frpc.toml ]; then
exec /usr/local/bin/frps -c /etc/frp/frps.toml
elif [ -f /etc/frp/frpc.toml ] && [ ! -f /etc/frp/frps.toml ]; then
exec /usr/local/bin/frpc -c /etc/frp/frpc.toml
fi
echo "ERROR: 无法判定运行模式。"
echo "请挂载 /etc/frp/frps.toml 或 /etc/frp/frpc.toml,或设置 FRP_MODE=server|client"
exit 1
行为摘要
本地快速构建
docker build -t micrograils/frp:latest .
一次性跨平台推送到 Docker Hub
docker buildx create --use # 首次执行
docker buildx build \
--platform linux/amd64,linux/arm64 \
--build-arg ALPINE_VERSION=3.22 \
--build-arg FRP_VERSION=0.65.0 \
-t micrograils/frp:0.65.0 \
-t micrograils/frp:latest \
--push .
CI 示例(GitHub Actions)
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Buildx
uses: docker/setup-buildx-action@v3
- name: Build & push
uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
build-args: |
ALPINE_VERSION=3.22
FRP_VERSION=0.65.0
tags: |
micrograils/frp:0.65.0
micrograils/frp:latest
push: true
至此,镜像已支持主流 x86_64 与 ARM64 环境,可直接 docker pull micrograils/frp 使用。
Project: https://github.com/fatedier/frp
Content type
Image
Digest
sha256:87fa9a1f2…
Size
17.9 MB
Last updated
5 days ago
docker pull micrograils/frp