docker ERR_NAME_NOT_RESOLVED http ajax

我有3个简单的微服务(mysql,apirest,gui),我开始使用docker-compose:

version: '3.2' services: mysql: image: mysql/mysql-server:5.6 container_name: mysql restart: always volumes: - mysql:/var/lib/mysql/data ports: - "3306:3306" networks: - mynetwork deploy: mode: replicated replicas: 1 environment: - MYSQL_ROOT_PASSWORD=mypwd - MYSQL_USER=myuser - MYSQL_PASSWORD=myuserpwd - MYSQL_DATABASE=my-db apirest: image: .....apirest:latest container_name: apirest restart: always volumes: - apirest:/apirest/tmp ports: - "30000:3000" networks: - mynetwork deploy: mode: replicated replicas: 2 gui: image: ......gui:latest container_name: gui restart: always links: - apirest ports: - "34200:4200" networks: - mynetwork networks: mynetwork: volumes: apirest: mysql: 

MySQL最好的微服务可以没有问题地进行通信(我可以使用mysql作为主机名从apirest连接到我的数据库。

但是当我尝试执行一个使用最高主机名的http请求(angular度)时,我在gui microservice中得到了以下错误:

无法加载资源:net :: ERR_NAME_NOT_RESOLVED

gui微服务我可以ping最亲近的

 docker exec -it gui ping apirest --- apirest ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.069/0.203/0.338 ms 

如果我使用公共服务器地址( http:// serverip:30000 / api / test )执行http请求而不是apirest ,则没有问题,http请求成功。

我究竟做错了什么??

谢谢

AJAX请求是浏览器请求而不是服务器端的请求,您的浏览器不是我的networking的一部分。 要发出ajax请求(客户端浏览器需要是公共域或带有服务节点端口的映射主机文件)。 您仍然需要在您的浏览器主机中映射主机文件,或者在gui代码中使用带有服务节点端口的完整url。

如果你想避免使用端口,代理是在我使用Nginx的情况下公开服务的最佳方式

GUI — ajax req(浏览器到服务器req)—-> PROXY(NGINX)—(服务器到服务器) – > apirest