如何从前端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_ADDR
, MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_PORT
。 有envvariables相应地返回172.17.0.2
和3000
。 但重点是浏览器客户端无法访问内部的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
容器