micrograils/frp

By micrograils

Updated 5 days ago

Ultra-lightweight multi-arch image for fatedier/frp - expose local services behind NAT/firewall.

Image
Networking
Security
Developer tools
0

6.6K

micrograils/frp repository overview

Docker Image Size Docker Pulls Platforms

micrograils/frp

一句话:把内网服务“无痛”暴露到公网的最小镜像。
镜像大小 < 20 MB,零依赖,支持 AMD64 / ARM64。


1. 30 秒上手

目标:把内网容器 8080 端口映射到公网 28080 端口。

节点IP 示例角色
公网服务器 A1.2.3.4frps(服务端)
内网服务器 B192.168.1.100frpc(客户端)

1.1 服务端(公网 A)
  1. 创建 frps.toml
bindPort = 7000
auth.token = "REPLACE_ME_WITH_RANDOM_STRING"
  1. 启动
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

1.2 客户端(内网 B)
  1. 创建 frpc.toml
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
  1. 启动
docker run -d --name frpc \
  --network host \
  -v $PWD/frpc.toml:/etc/frp/frpc.toml \
  -e FRP_MODE=client \
  --restart unless-stopped \
  micrograils/frp
  1. 验证
    浏览器访问 http://1.2.3.4:28080,即可打开内网服务。

1.3 进阶用法
场景配置入口
多协议(tcp / udp / http / https / stcp / xtcp)参考 frpc_full_example.toml
TLS 加密、压缩、负载均衡、Prometheus 监控同上
自定义 frps 监听地址、Dashboard、子域名参考 frps_full_example.toml

1.4 环境变量
变量默认值说明
FRP_MODE必填,serverclient
FRP_CONF/etc/frp/frps.toml/etc/frp/frpc.toml自定义配置文件路径

1.5 持久化 & 升级
# 升级镜像(零停机)
docker pull micrograils/frp
docker stop frps && docker rm frps
# 重新执行 docker run … 即可,配置无需改动

1.6 安全提示
  • 务必替换默认 auth.token,长度 ≥ 32 位随机字符串。
  • 公网端口仅开放必要端口(7000 与所需 remotePort)。
  • 生产环境建议开启 tls.enable = true 并配合防火墙限速。

1.7 链接

2. 构建指南

2.1 Dockerfile(精简多阶段构建)
# ---- 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"]

要点

  • 多阶段构建,最终镜像仅 ~18 MB
  • 自动识别 TARGETARCH,无需手动指定 AMD64/ARM64
  • 默认暴露 7000(可覆盖)

2.2 entrypoint.sh(智能模式识别)
#!/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

行为摘要

  1. 环境变量优先;
  2. 单配置文件场景自动匹配;
  3. 冲突或缺失配置时立即退出,避免静默失败。

2.3 构建与发布

本地快速构建

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 使用。

Base On

Project: https://github.com/fatedier/frp

Tag summary

Content type

Image

Digest

sha256:87fa9a1f2

Size

17.9 MB

Last updated

5 days ago

docker pull micrograils/frp