Docker 服务之间的本地通信

Docker 服务之间的本地通信,docker,dns,docker-swarm,Docker,Dns,Docker Swarm,我的docker集群中有2个服务前端在端口8090上运行,后端在端口8000上运行。如何通过本地DNS(如fetch”)进行frontend呼叫backendhttps://backend.local/)?因为如果我使用docker主机名,我需要指定调用后端的端口。我的docker中是否需要一个本地DNS服务器?您必须在docker中创建一个软件定义的网络(SDN),然后在该网络中运行的所有容器都可以使用容器名称彼此通信,或者您可以为每个容器定义别名并使用该名称。可以使用以下配置创建后端微服务和

我的docker集群中有2个服务<代码>前端在端口
8090
上运行,
后端
在端口
8000
上运行。如何通过本地DNS(如
fetch”)进行
frontend
呼叫
backend
https://backend.local/)
?因为如果我使用docker主机名,我需要指定调用后端的端口。我的docker中是否需要一个本地DNS服务器?

您必须在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


docker
-标签描述:“…关于在生产中运行docker的问题可能会在ServerFault()上找到更好的答案…”谢谢,我将我的问题复制到了那里,您可以在docker文档中通读;它描述了在正常配置中可用的主机名。但是,还要注意,如果您的前端是基于浏览器的React或Angular应用程序,则任何HTTP客户端调用都将来自浏览器,而不是Docker容器,并且您不能在此处使用Docker本机网络。感谢您的注意,但是我在前端使用SSR,所以这根本不是问题。在上面的文件中,要查找的关键是后端用于连接数据库的DB_HOST env变量。请注意,Compose为您创建了一个名为
default
的网络,服务名可用作主机名。您不需要手动
网络:
容器名称:
配置。如果使用这种方法,我仍然需要定义端口,我试图解决的是,在不定义端口的情况下访问主机