使用单个url dockercompos访问多个服务

2024-05-29 04:57:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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-apihttp://example.com/search,但我无法确定,因为这两个服务运行在两个不同的端口上。我知道我需要使用nginx并对其进行配置,以便能够访问它们。但我不知道该怎么做。有人能帮我吗?或者至少给我一些文件让我读一下,以便了解路线?在

此外,两个服务都使用/health来报告健康检查的结果。如何访问这两个服务的健康检查?在


Tags: composedockertestbuildcomredisapihttp
0条回答
网友
1楼 · 发布于 2024-05-29 04:57:32

所以对于那些正在寻找快速解决方案的人,这里是我的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;
        }
    }
}
网友
2楼 · 发布于 2024-05-29 04:57:32

正如您所写的,您应该使用放置在服务前面的负载平衡器。现在,您应该在不暴露端口的情况下创建docker网络。唯一公开端口的容器应该是nginx容器,以便处理所有客户端请求。test-apisearch和{}应该是同一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的更多信息:

相关问题 更多 >

    热门问题