将网络连接到服务

时间:2020-09-16 15:17:23

标签: docker docker-compose

我只有2天的时间学习docker,而且我不知道如何找到如何连接两个服务的方法。因此,就我而言,我正在锻炼,

  • 投票层,允许投票与Redis通信。
  • 结果层以允许结果与数据库通信。
  • 后端,允许工作人员与Redis和db通信。

和我的docker-compose.yml看起来像这样:

version: '3.0'
services:
    poll:
        build: poll/.
        ports:
            - "5000:80"
        networks: 
            - poll-tier
    redis:
        image: "redis"
        expose: 
            - "6379"
    worker:
        build: worker/.
        networks: 
            - back-tier
    db:
        image: "postgres"
        volumes:
            - "db-data:/var/lib/postgresql/data"        
    result:
        build: result/.
        networks: 
            - result-tier
volumes:
    db-data:
networks:
    poll-tier:
        name: redis
    result-tier:
        name: db
    back-tier:
        name: redis, db

问题是,我如何与不同的服务进行通信?

1 个答案:

答案 0 :(得分:1)

通过将网络添加到服务中,您将其限制为仅在该网络内进行通信,因此对于交叉通信,您需要添加多个网络。例如,在轮询服务中,您需要同时具有“轮询层”和“后端层”,以便轮询服务可以与Redis服务进行通信。

您的撰写文件应如下所示:

version: '3.0'
services:
    poll:
        build: poll/.
        ports:
            - "5000:80"
        networks: 
            - poll-tier
    redis:
        image: "redis"
        expose: 
            - "6379"
        networks:
            - back-tier
            - poll-tier
    worker:
        build: worker/.
        networks: 
            - back-tier
    db:
        image: "postgres"
        volumes:
            - "db-data:/var/lib/postgresql/data"
        networks:
            - back-tier
            - result-tier       
    result:
        build: result/.
        networks: 
            - result-tier
volumes:
    db-data:
networks:
    poll-tier:{}
    result-tier:{}
    back-tier:{}