gpt4 book ai didi

angular - docker ERR_NAME_NOT_RESOLVED http ajax

转载 作者:行者123 更新时间:2023-12-02 10:37:55 24 4
gpt4 key购买 nike

我有 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:

mysqlapirest 微服务可以毫无问题地进行通信(我可以使用 mysqlapirest 连接到我的数据库 作为主机名。

但是当我尝试使用 apirest 作为主机名执行 http 请求( Angular )时,我在 gui 微服务中收到以下错误:

Failed to load resource: net::ERR_NAME_NOT_RESOLVED

gui 微服务,我可以 ping apirest:

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

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

我做错了什么?

谢谢

最佳答案

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

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

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

关于angular - docker ERR_NAME_NOT_RESOLVED http ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com