如何从前端js请求链接的容器?

我使用docker-compose构build应用程序。

一个docker集装箱是一个唯一的轨道API应用程序。 其次是有angular度的node.js应用程序。

我需要的是向轨道容器发出POST和GET请求,以便从它获取数据到我的Angular应用程序。

泊坞窗,compose.yml

rails_server: build: ./rails_server nodejs_server: build: ./nodejs_server ports: - "80:8080" links: - rails_server 

我试图使用docker为我提供的ENVvariables来访问rails容器。 像MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_ADDRMICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_PORT 。 有envvariables相应地返回172.17.0.23000 。 但重点是浏览器客户端无法访问内部的docker专用networking。 所以我无法向我的Rails应用程序发出请求。 我想我可以发送请求回到节点js,然后到轨道,但感觉不对。

我应该如何解决这个问题?

所以正确的做法是在我的nodejs容器上使用代理服务器。

例如。 我的Express js正在寻找/ api端点的请求,并将它们代理到我的RoR容器。

喜欢:

 var config = { api_uri: process.env.MICROSERVICESCHAT_API_1_PORT_3000_TCP || "http://localhost:3000" } var apiProxy = httpProxy.createProxyServer(); app.all('/api/*', function (req, res) { req.url = req.url.replace(/\/api/, ''); apiProxy.web(req, res, { target: config.api_uri }); }); 

您可以在示例应用程序中更仔细地查看它https://github.com/gabyshev/microservices_chat

根据你写的内容,似乎你需要从浏览器访问rails_server ,这意味着rails_server应该可以从外部访问。 与发布nodejs_server容器的端口类似,发布nodejs_server容器的端口:

 rails_server: build: ./rails_server ports: - "8080:8080" nodejs_server: build: ./nodejs_server ports: - "80:8080" links: - rails_server 

这种方式在浏览器中,如果你请求http://host_ip_address:8080/它将被redirect到你的rails_server容器