服务之间的本地通信

时间:2020-12-25 16:25:45

标签: docker dns docker-swarm

我的 docker 集群中有 2 个服务。 frontend 在端口 8090 上运行,而 backend 在端口 8000 上运行。如何通过本地 DNS(如 frontend)使 backend 呼叫 fetch('https://backend.local/')?因为如果我使用docker-hostname,我需要指定端口来调用后端。我的 docker 中需要有本地 DNS 服务器吗?

1 个答案:

答案 0 :(得分:0)

您必须在 docker 中创建一个软件定义网络 (SDN),然后在该网络中运行的所有容器都可以使用容器名称相互通信,或者您可以为每个容器定义别名并使用它。可以使用以下配置为后端微服务和 mysql 数据库创建一个简单的 docker-compose 文件。

version: '3.2'

networks:
  testNetwork:

services:

  mysql-dev:
    image: mysql:latest
    container_name: mysql-dev
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=root
    ports:
      - "3306:3306"
    networks:
      - testNetwork

  backend:
    image: backend:1.0
    container_name: backend
    environment:
      - DB_USER=root
      - DB_PASS=root
      - DB_NAME=root
      - DB_HOST=mysql-dev
      - DB_DIALECT=mysql
    ports:
      - "4000:4000"
    working_dir: /backend
    command: npm start
    networks:
      - testNetwork