Docker 服务之间的本地通信
我的docker集群中有2个服务<代码>前端在端口Docker 服务之间的本地通信,docker,dns,docker-swarm,Docker,Dns,Docker Swarm,我的docker集群中有2个服务前端在端口8090上运行,后端在端口8000上运行。如何通过本地DNS(如fetch”)进行frontend呼叫backendhttps://backend.local/)?因为如果我使用docker主机名,我需要指定调用后端的端口。我的docker中是否需要一个本地DNS服务器?您必须在docker中创建一个软件定义的网络(SDN),然后在该网络中运行的所有容器都可以使用容器名称彼此通信,或者您可以为每个容器定义别名并使用该名称。可以使用以下配置创建后端微服务和
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
的网络,服务名可用作主机名。您不需要手动网络:
或容器名称:
配置。如果使用这种方法,我仍然需要定义端口,我试图解决的是,在不定义端口的情况下访问主机