2015-12-08 52 views
3

泊坞窗容器的链接别名我有3层独立的部分,以我的dockerized应用:如何连接到从主机

  • nodeapp:运行expressjs应用从/api访问时返回一个JSON对象的一个​​node:latest泊坞窗容器。此服务器也根据this site启用COR。
  • nginxserver:简单地承载了index.html文件,允许用户点击一个按钮,这将使了XMLHttpRequest上面的节点服务器A nginx:latest静态服务器。
  • 主机

node:latest有其端口通过3000:80暴露给主机。

nginx:latest的端口通过8080:80暴露给主机。

主机我能够同时访问nodeappnginxserver单独:我可以提出请求,看到了JSON对象使用curl从命令行节点服务器返回,按钮(当我点击localhost:8080时,屏幕上可以看到index.html)。

但是,当我尝试点击按钮时,XMLHttpRequest('GET', 'http://nodeapp/api', true)的调用失败,但看起来并没有击中nodeapp服务器(不存在日志)。我假设这是因为主机不明白http://nodeapp/api

有没有办法告诉码头,虽然容器正在运行,以将其容器链接别名添加到我的hosts文件?

我不知道我的问题是否是我的问题的正确解决方案。它看起来好像我得到一个CORs错误返回,但我不认为它曾经击中我的服务器。这是否与从主机访问应用程序有关?

Here is a link to an example repo

编辑:我已经注意到,使用点击按钮发送一个从我的nginx的容器响应的堆栈时。我很困惑,为什么它是通过该服务器路由,因为nodeapp在我的hosts文件中,所以它应该识别那里的关联?

+0

乌尔正确的,你的主机不明白nodeapp,你可以使用nginx的重定向功能总是指向nginx –

回答

0

问题

nodeapp存在于内部网络,这是只有你nginxserver可见,你可以通过输入nginxserver

docker exec -it nginxserver bash 
# cat /etc/hosts 

最重要的是检查这一点,您的服务设置不正确, nginxserver将作为nodeapp

host (client) -> nginxserver -> nodeapp 

肮脏的快速解决方案

如果你真的想你的客户(主机)来访问内部应用程序nodeapp,那么你下面的代码简单的变化

XMLHttpRequest('GET', 'http://nodeapp/api', true) 

XMLHttpRequest('GET', 'http://localhost:3000/api', true) 

由于您的docker-compose.ymlnodeapp服务端口80作为3000暴露在家庭网络中,可以直接访问。

更好的解决方案

你需要重新设计你的服务栈,使nginxserver作为前端节点,看到一个样本http://schempy.com/2015/08/25/docker_nginx_nodejs/

相关问题