![](/img/trans.png)
[英]Container is unreachable from up services when using docker-compose run
[英]Accessing multiple services using single url docker-compose
我正在使用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/test-api
或http://example.com/search
,但是由于这两个服务正在运行,因此我无法弄清楚2个不同的端口。 我知道我需要使用nginx并对其进行配置,以便可以访问它们。 但是我不确定该怎么做。 有人可以帮我这个问题,或者至少给我一些文档阅读以理解路由吗?
同样,这两个服务都使用/ health报告健康检查的结果。 如何访问两项服务的运行状况检查?
在撰写本文时,应使用位于服务前面的负载平衡器。 现在,您应该在不暴露端口的情况下创建一个docker网络。 唯一公开端口的容器应该是nginx容器,以便处理所有客户端请求。 test-api
, search
和nginx
应该是同一个docker网络的一部分,以允许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
更多信息:
因此,对于那些寻求快速解决方案的人们,这是我的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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.