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

2021-03-30 00:54:55 +08:00
 dzdh

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 的配置文件?

1549 次点击
所在节点    Docker
7 条回复
Tink
2021-03-30 07:58:54 +08:00
反向代理吧
dzdh
2021-03-30 08:32:58 +08:00
@Tink

三个隔离的容器 proxy 是怎么知道哪个 domain 『绑』在哪个 container 上?端口是什么?然后把请求发过去的
Tink
2021-03-30 09:11:40 +08:00
@dzdh 这明显是要配置的啊,你看文章啊
Tink
2021-03-30 09:12:17 +08:00
@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
2021-03-30 09:39:15 +08:00
人家写得很清楚…

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
2021-03-30 09:58:03 +08:00
本质上这个就是用 docker-gen 来实时读取 docker container 的列表,然后筛选出带 host 标签的 container,然后生成一份最新的 nginx.conf,然后执行 nginx reload, 就这么简单
dzdh
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)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766343

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX