我正在使用docker-compose在flask中部署多个微服务。这是撰写代码
version: '3'
services:
test-api:
volumes:
- ./test-api:/test-api
build: test-api
ports:
- "5000:5000"
redis:
image: "redis:alpine"
search:
volumes:
- ./seach:/search
environment:
- HTTP_PORT=5000
- REDIS_URL=redis://redis:6379/0
build: search
ports:
- "5001:5000"
link:
- redis
现在我必须从单个URL访问此服务,例如:http://example.com/test-api
或http://example.com/search
,但由于2个服务正在运行,我无法弄清楚它是在2个不同的端口上。我知道我需要使用nginx并对其进行配置以便我可以访问它们。但我不知道该怎么做。有人可以帮我这个或至少给我一些文档阅读,以便了解路由?
这两项服务都使用/ health来报告健康检查的结果。如何访问这两项服务的健康检查?
答案 0 :(得分:0)
正如您所写,您应该使用放在服务前面的负载均衡器。现在,您应该创建一个docker网络而不暴露端口。暴露端口的唯一容器应该是nginx容器,以便处理所有客户端请求。 test-api
,search
和nginx
应该是同一个泊坞网络的一部分,以便允许nginx将请求分派到正确的容器中。您的docker-compose
文件应如下所示:
version: '3'
services:
loadbalancer:
image: nginx
ports:
- "80:8080"
networks:
- my_netowrk
test-api:
volumes:
- ./test-api:/test-api
build: test-api
networks:
- my_netowrk
redis:
image: "redis:alpine"
networks:
- my_netowrk
search:
volumes:
- ./seach:/search
environment:
- HTTP_PORT=5000
- REDIS_URL=redis://redis:6379/0
build: search
networks:
- my_netowrk
networks:
my_netowrk:
driver: <driver>
我建议你不再使用links
,它们已经过时并且已弃用。
您可以从以下链接中了解有关docker networks
的更多信息:
答案 1 :(得分:0)
因此,对于正在寻找快速解决方案的人来说,这是我的nginx文件
http {
server {
listen 80;
location /test {
proxy_pass http://test-api:5000;
}
location /search {
proxy_pass http://search:5000;
}
location /health-test {
proxy_pass http://test-api:5000/health;
}
location /health-search {
proxy_pass http://search:5000/health;
}
}
}