链接的docker-compose制作http请求的容器

我一直在网上看了一会儿,还没有find解决scheme,我的问题是类似于这个StackOverflow问题的容器之间的Docker HTTP请求 。 但是这个答案已经是我在电脑里做的事了。 我正在提供我的docker-compose文件

version: "3" services: web: image: ecdavis15/tsn-web-server ports: - "3000:3000" links: - app app: image: ecdavis15/tsn-app-server ports: - "3030:3030" links: - mongo mongo: image: mongo ports: - "27017:27017" volumes: - ./data/db:/data/db 

在我的Web容器中,我向http://app:3030/history或者http://app:3030/rules发出一个http get请求,但是我没有看到请求find应用程序容器的path。 我在浏览器控制台中看到的是net::ERR_NAME_NOT_RESOLVED这个错误信息。 我不确定为什么http请求没有进入应用程序容器,因为它被链接到web容器。 有任何想法吗?

既然你做了一个Ajax调用,它将由客户端而不是服务器端的浏览器发送。 所以当你从<IP>:3000打电话到API app:3030 ,你的浏览器不知道应用是什么。 所以你有几件事你可以做

使用主机文件

/ etc / hosts文件

 <IP> app 

那么当你使用app:3000浏览应用时, app:3030会自动指向正确的地址。

使用JavaScript来确定APIurl

您可以使用JavaScript来获取您应该用于api的url

 document.location.scheme + "://" + document.location.hostname + ":3030" 

使用nginx

你可以创buildnginx反向代理

 location / { proxy_pass http://localhost:3000; location /api { proxy_pass http://localhost:3030; } } 

这将需要对代码文件进行一些更改,以便使用/api