【发布时间】:2016-03-13 17:56:26
【问题描述】:
我的 dockerized 应用程序有 3 个独立的部分:
-
nodeapp:运行 expressjs 应用程序的node:latestdocker 容器,当从/api访问时返回 JSON 对象。此服务器也根据this site 启用了 COR。 -
nginxserver:一个nginx:latest静态服务器,它简单地托管一个index.html文件,允许用户单击一个按钮,该按钮将向上面的节点服务器发出XMLHttpRequest。 - 我的主机机器
node:latest 的端口通过3000:80 暴露给主机。
nginx:latest 的端口通过8080:80 暴露给主机。
从 host 我可以同时访问 nodeapp 和 nginxserver 单独:我可以提出请求并查看从命令行使用curl 从节点服务器返回的JSON 对象,当我点击localhost:8080 时,按钮(index.html)在屏幕上可见。
但是,当我尝试单击按钮时,对 XMLHttpRequest('GET', 'http://nodeapp/api', true) 的调用失败,而似乎没有命中 nodeapp 服务器(不存在日志)。我假设这是因为 host 不理解 http://nodeapp/api。
有没有办法告诉 docker 在容器运行时将其容器链接别名添加到我的主机文件?
我不知道我的问题是否是解决问题的正确方法。看起来好像我收到了返回的 CORs 错误,但我认为它从来没有击中我的服务器。这是否与从我的主机访问应用程序有关?
Here is a link to an example repo
编辑:我注意到在使用堆栈时,单击按钮会发送来自我的 nginx 容器的响应。我很困惑为什么它通过该服务器路由,因为nodeapp 在我的hosts 文件中,所以它应该识别那里的相关性?
【问题讨论】:
-
你是正确的,你的主机不理解 nodeapp,你可以使用 nginx 重定向功能始终指向 nginx