我正在使用docker-compose构建应用程序。
一个docker容器是仅限rails api的应用程序。第二个是带角度的node.js app。
我需要的是对rails容器发出POST和GET请求,以便将数据从它获取到我的Angular应用程序。
搬运工-compose.yml
library(ggplot2)
radius <- function(h, s){
return((4 * h^2 + s^2) / 8 * h )
}
p <-ggplot(data.frame(x = c(0.0, 20)), aes(x))
plot(
p + stat_function(fun=radius, aes(color="10"), args=list(s=10))
+ stat_function(fun=radius, aes(color="20"), args=list(s=20))
+ stat_function(fun=radius, aes(color="30"), args=list(s=30))
+ stat_function(fun=radius, aes(color="40"), args=list(s=40))
+ scale_y_continuous(limits = c(0,1000))
)
我尝试使用docker compose为我提供的ENV变量来访问rails容器。与rails_server:
build: ./rails_server
nodejs_server:
build: ./nodejs_server
ports:
- "80:8080"
links:
- rails_server
,MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_ADDR
一样。 env vars相应地返回MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_PORT
和172.17.0.2
。
但重点是浏览器客户端无法访问内部docker专用网络。所以我无法向我的rails应用程序发出请求。我想我可以将请求发送回节点js然后发送到rails但是感觉不对。
我该如何解决这个问题?
答案 0 :(得分:1)
所以正确的方法是在我的nodejs容器上使用代理服务器。
例如。 My 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 });
});
中更仔细地查看
答案 1 :(得分:0)
根据您所写的内容,您似乎需要从浏览器访问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
容器