V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
yangxuan8282
V2EX  ›  Linux

frpd - 利用 docker-gen 自动化配置 frp 访问容器内服务

  •  1
     
  •   yangxuan8282 · 2017-06-13 18:07:26 +08:00 · 4121 次点击
    这是一个创建于 2720 天前的主题,其中的信息可能已经有所发展或是发生改变。

    GitHub 地址: https://github.com/yangxuan8282/frpd

    使用 docker 的过程中容器的 ip 可能是变动的,这样访问起来不太方便, 而用类似 jwilder/nginx-proxy 这种镜像可以在其它容器启动或停止之后自动生成配置文件,通过指定域名,就可以方便的访问容器内的服务

    frpd 本身和 jwilder/nginx-proxy 原理一样,也是利用 docker-gen 去在容器起停之后按照模板和用户给的环境变量自动生成 frp 的配置文件

    大致使用过程是先在服务器端(有公网 IP 的机器)和客户端分别创建网络:

    docker network create proxy-network
    

    然后用项目里提供的 docker-compose.yml 模板启动 frps

    再在客户端利用 docker-compose.yml 模板启动 frpc

    之后启动服务就可以了,比如启动 gogs,下载这个 docker-compose.yml 模板,然后把 VIRTUAL_HOST= 后面改成你的域名,用 docker-compose up -d 启动后就可以通过刚才指定的域名访问你部署的 gogs 了,其它服务也都类似

    这有一些应用的 docker-compose.yml 模板: https://github.com/yangxuan8282/docker-recipes

    我尝试连了三个 client,一个是和 frps 运行在同一台机器上,一个是家里的树莓派,还有一个是虚拟机里的 ubuntu,三个 frpc 用的同样的域名,不同前缀,都可以连接成功,使用不同域名应该也可行

    想起做这个起因是前段时间在 v 站发帖 t/362833 求大家推荐一款好用的内网穿透软件,然后不少 v 友推荐 frp,尝试之后发现确实比较方便,能直接完成端口转发,后来在使用过程中想能不能配置成类似 jwilder/nginx-proxy 那样的自动化配置的反向代理,方便访问容器里的服务,毕竟 nginx 不是专门的反代,支持的协议有限

    用单独的容器验证了一下发现确实可以实现

    大致过程:

    • 启动 frps 容器

    • 启动要访问的容器

    • docker ps -a 查看 container ID

    • docker inspect $CONTAINER_ID 查看 container ip

    • 编辑 frpc.ini, 更改 local_ip 为 container ip, 更改 local_port 为 container expose 的端口

    • 启动 frpc

    手动验证可行之后就尝试用 docker-gen 进行自动化配置,对照 docker-gen 提供的 nginx 模板和 golang 的 template 文档,改好了模板文件,测试成功,后来在写 frpc 的 Dockerfile 时候参照了 BlackGlory/caddy-proxy

    frp 内置的 dashboard 可以访问,转发本地的 ssh 端口 和 udp 也都可用,这几个没默认开启,需要开启的话看一下 frpc.tmpl,对照注释把对应的部分反注释掉,然后启动 docker 的时候给一下相应的环境变量即可,当然也需要启动 frps 时 publish 相应的端口

    2 条回复    2017-06-14 01:39:12 +08:00
    miniers
        1
    miniers  
       2017-06-14 00:04:36 +08:00
    点个赞,docker-gen 还是很好用的,我也是才做了一个 caddy-proxy 的镜像,不过原版 docker-gen 不能满足我的一些需求,自己加工了一番
    yangxuan8282
        2
    yangxuan8282  
    OP
       2017-06-14 01:39:12 +08:00
    刚发现还有 docker compose 的搜索引擎: https://www.composeregistry.com/

    还发现了一个 compose 的 ui: https://github.com/francescou/docker-compose-ui
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:46 · PVG 03:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.