upstream loadbalancer {
server 172.17.0.1:5001 weight=6;
server 172.17.0.1:5002 weight=4;
}
server {
location / {
proxy_pass http://loadbalancer;
}}
我们可以在dockerized应用程序中使用172.17.0.1作为IP吗,这个ip指向什么?
另外,我们可以将任何我们想要的内容作为 proxy_pass 吗?我查看了几个配置,似乎确实如此。
我从那里获得了配置。
version: '3'
services:
app1:
build: ./app1
ports:
- "5001:5000"
app2:
build: ./app2
ports:
- "5002:5000"
nginx:
build: ./nginx
ports:
- "8080:80"
depends_on:
- app1
- app2
似乎您唯一需要正确输入的是端口号,尽管在上面的应用程序中我们似乎将两个请求移植到服务端口 5000 的同一应用程序。因为 5001 和 5002 都重定向到 5000。
答案1
当你启动一个组合堆栈时,docker 会创建一个自定义桥接网络,这些 IP 指的是网络中的端点/应用程序。
也就是说,您不应该依赖 IP 地址。由于您使用的是 Compose,请将它们连接到同一网络,并通过服务名称而不是 IP 来引用服务。您的 Compose 也有不正确的缩进,因此整个配置都是不正确的。
撰写看起来应如下所示:
version: '3'
services:
app1:
build: ./app1
ports:
- "5001:5000"
networks:
- app
app2:
build: ./app2
ports:
- "5002:5000"
networks:
- app:
nginx:
build: ./nginx
ports:
- "8080:80"
depends_on:
- app1
- app2
networks:
- app:
networks:
app:
请注意networks
将应用程序和 nginx 放在同一网络上的键。现在您可以通过服务名称引用服务,在 nginx 配置中它应该如下所示:
upstream loadbalancer {
server app1:5001 weight=6;
server app2:5002 weight=4;
}
server {
location / {
proxy_pass http://loadbalancer;
}
}