繁体   English   中英

使用单个URL docker-compose访问多个服务

[英]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-apihttp://example.com/search ,但是由于这两个服务正在运行,因此我无法弄清楚2个不同的端口。 我知道我需要使用nginx并对其进行配置,以便可以访问它们。 但是我不确定该怎么做。 有人可以帮我这个问题,或者至少给我一些文档阅读以理解路由吗?

同样,这两个服务都使用/ health报告健康检查的结果。 如何访问两项服务的运行状况检查?

在撰写本文时,应使用位于服务前面的负载平衡器。 现在,您应该在不暴露端口的情况下创建一个docker网络。 唯一公开端口的容器应该是nginx容器,以便处理所有客户端请求。 test-apisearchnginx应该是同一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM