如何从前端js向链接容器发出请求?
How to make request to linked container from frontend js?
我正在使用 docker-compose 构建应用程序。
一个 docker 容器是 rails api 唯一的应用程序。第二个是 node.js 应用 angular.
我需要向 rails 容器发出 POST 和 GET 请求,以便将数据从容器中获取到我的 Angular 应用程序。
docker-compose.yml
rails_server:
build: ./rails_server
nodejs_server:
build: ./nodejs_server
ports:
- "80:8080"
links:
- rails_server
我试图使用 docker 为我提供的 ENV 变量访问 rails 容器。喜欢 MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_ADDR
、MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_PORT
。相应地有 env vars return 172.17.0.2
和 3000
。
但重点是浏览器客户端无法访问内部 docker 专用网络。所以我无法向我的 rails 应用发出请求。我想我可以将请求发送回节点 js,然后发送到 rails 但感觉不对。
我该如何解决这个问题?
根据您所写的内容,您似乎需要从浏览器访问 rails_server
,这意味着 rails_server
应该可以从外部访问。与为 nodejs_server
容器发布端口类似,为 rails_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/
它将被重定向到您的 rails_server
容器
所以正确的方法是在我的 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
我正在使用 docker-compose 构建应用程序。
一个 docker 容器是 rails api 唯一的应用程序。第二个是 node.js 应用 angular.
我需要向 rails 容器发出 POST 和 GET 请求,以便将数据从容器中获取到我的 Angular 应用程序。
docker-compose.yml
rails_server:
build: ./rails_server
nodejs_server:
build: ./nodejs_server
ports:
- "80:8080"
links:
- rails_server
我试图使用 docker 为我提供的 ENV 变量访问 rails 容器。喜欢 MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_ADDR
、MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_PORT
。相应地有 env vars return 172.17.0.2
和 3000
。
但重点是浏览器客户端无法访问内部 docker 专用网络。所以我无法向我的 rails 应用发出请求。我想我可以将请求发送回节点 js,然后发送到 rails 但感觉不对。
我该如何解决这个问题?
根据您所写的内容,您似乎需要从浏览器访问 rails_server
,这意味着 rails_server
应该可以从外部访问。与为 nodejs_server
容器发布端口类似,为 rails_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/
它将被重定向到您的 rails_server
容器
所以正确的方法是在我的 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