V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dzdh
V2EX  ›  Docker

jwilder/nginx-proxy 这个镜像是啥原理可以动态设置多域名

  •  
  •   dzdh · 2021-03-30 00:54:55 +08:00 · 1400 次点击
    这是一个创建于 1094 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://www.yannmoisan.com/docker.html

    docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
    docker run -d -e VIRTUAL_HOST=site1 ymn/site1
    docker run -d -e VIRTUAL_HOST=site2 ymn/site2
    

    怎么就nginx-proxy就能获取到 site1.domain 然后当 nginx-proxy收到 80 端口请求后再动态转发给 site 这个容器的?

    如果不用这种形式的话。是不是就只能是改容器内的 nginx 的配置文件?

    7 条回复    2021-03-30 10:35:46 +08:00
    Tink
        1
    Tink  
       2021-03-30 07:58:54 +08:00 via Android
    反向代理吧
    dzdh
        2
    dzdh  
    OP
       2021-03-30 08:32:58 +08:00
    @Tink

    三个隔离的容器 proxy 是怎么知道哪个 domain 『绑』在哪个 container 上?端口是什么?然后把请求发过去的
    Tink
        3
    Tink  
       2021-03-30 09:11:40 +08:00 via Android
    @dzdh 这明显是要配置的啊,你看文章啊
    Tink
        4
    Tink  
       2021-03-30 09:12:17 +08:00 via Android
    @dzdh

    Let’s create a new project, divided in 3 folders : site1, site2, proxy. One folder for each container.

    proxy
    Dockerfile
    conf
    conf.d
    site1.conf
    site2.conf
    site1
    Dockerfile
    index.html
    site2
    Dockerfile
    index.html
    oott123
        5
    oott123  
       2021-03-30 09:39:15 +08:00 via Android
    人家写得很清楚…

    Docker expose a remote API that allows to automate many tasks. So some projects leverage this API, like nginx-proxy which generate automatically the config of the proxy:
    Kilerd
        6
    Kilerd  
       2021-03-30 09:58:03 +08:00
    本质上这个就是用 docker-gen 来实时读取 docker container 的列表,然后筛选出带 host 标签的 container,然后生成一份最新的 nginx.conf,然后执行 nginx reload, 就这么简单
    dzdh
        7
    dzdh  
    OP
       2021-03-30 10:35:46 +08:00
    @oott123
    @Kilerd

    好的,看了 dockerfile,使用了 docker-gen,定时刷 共享的 docker.sock 调用接口 /containers/json 然后再遍历所有容器再调用 /containers/$containerId/json 再获取 {{.Config.Env}} 然后刷新 nginx 配置文件

    如果不用这种方案是不是就只能 把配置文件固定在镜像内然后再启动 service 了(swarm)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2983 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:05 · PVG 23:05 · LAX 08:05 · JFK 11:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.