docker frps 内网穿透容器化服务

准备

  • 域名解析 将frp.xx.com解析到服务器ip,将泛域名 *.frp.xx.com解析到frp.xx.com即可
  • https证书申请 泛域名证书现在可以用acme.sh申请Let's Encrypt证书,坑挖好了 ,看这里 [新手教程]申请https泛域名解析
  • GitHub下载最新编译文件 GitHub frp releases
  • 复制frps和frps.ini文件到frps目录下
frps
      --frps
      --frps.ini
      --Dockerfile
  • 修改frps.ini配置文件

只需要按需修改

name value rmk
vhost_http_port 8888 http端口
vhost_https_port 445 https端口
dashboard_user username web管理端管理员账户
dashboard_pwd password web管理端管理员密码
subdomain_host frp.xx.com 子域名配置
# [common] is integral section
[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
bind_addr = 0.0.0.0
bind_port = 7000

# udp port to help make udp hole to penetrate nat
bind_udp_port = 7001

# udp port used for kcp protocol, it can be same with 'bind_port'
# if not set, kcp is disabled in frps
kcp_bind_port = 7000

# specify which address proxy will listen for, default value is same with bind_addr
# proxy_bind_addr = 127.0.0.1

# if you want to support virtual host, you must set the http port for listening (optional)
# Note: http port and https port can be same with bind_port
vhost_http_port = 8888
vhost_https_port = 445

# response header timeout(seconds) for vhost http server, default is 60s
# vhost_http_timeout = 60

# set dashboard_addr and dashboard_port to view dashboard of frps
# dashboard_addr's default value is same with bind_addr
# dashboard is available only if dashboard_port is set
dashboard_addr = 0.0.0.0
dashboard_port = 7500

# dashboard user and passwd for basic auth protect, if not set, both default value is admin
dashboard_user = user
dashboard_pwd = 124356aabb

# dashboard assets directory(only for debug mode)
# assets_dir = ./static
# console or real logFile path like ./frps.log
log_file = /frps/frps.log

# trace, debug, info, warn, error
log_level = info

log_max_days = 3

# disable log colors when log_file is console, default is false
disable_log_color = false

# auth token
token = tokenwords

# heartbeat configure, it's not recommended to modify the default value
# the default value of heartbeat_timeout is 90
# heartbeat_timeout = 90

# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
allow_ports = 2000-3000,3001,3003,4000-50000

# pool_count in each proxy will change to max_pool_count if they exceed the maximum value
max_pool_count = 5

# max ports can be used for each client, default value is 0 means no limit
max_ports_per_client = 0

# if subdomain_host is not empty, you can set subdomain when type is http or https in frpc's configure file
# when subdomain is test, the host used by routing is test.frps.com
subdomain_host = frp.xx.com

# if tcp stream multiplexing is used, default is true
tcp_mux = true

# custom 404 page for HTTP requests
# custom_404_page = /path/to/404.html

  • 修改Dockerfile文件
FROM centos
WORKDIR /frp
COPY . . 
RUN chmod -R 777 /frp
CMD ["/frp/frps","-c","/frp/frps.ini"]
  • 创建镜像
    frps目录下执行
docker build -t frps .
  • 创建并启动容器
docker run -d --restart=always -v /etc/frp/frps.ini:/frp/frps.ini -p 7000:7000 -p 7500:7500 -p 8888:8888 -p 445:445 --name frps_server frps

注意

445端口在win下为保留端口,请换到1000以上端口,具体参考msdn的文档说明

测试

访问IP:8888查看是否正常,若有异常可用 docker log 容器id 进行查看错误日志后处理

扩展

看的比较仔细的小伙伴已经看到了,我们端口设置的是8888,并不是80.访问的时候需要带上端口,使用上并不方便,下面我们将配置nginx转发,实现域名访问.
点这里继续 docker nginx 自定义配置容器

原文地址:https://www.cnblogs.com/LandWind/p/docker-frps-first.html