我有一个Docker化应用的3个独立部分:
从主机我可以单独访问nodeapp和nginxserver:我可以使用命令行中的
nodeapp
:运行一个expressjs应用程序的node:latest
Docker容器,当从/api
访问时返回JSON对象。该服务器也可以根据this site启用CORS。nginxserver
:一个nginx:latest
静态服务器,简单地托管一个index.html
文件,允许用户单击按钮,向上面的节点服务器发出XMLHttpRequest。- 我的主机机器
node:latest
通过3000:80
将其端口暴露给主机。
nginx:latest
通过8080:80
将其端口暴露给主机。从主机我可以单独访问nodeapp和nginxserver:我可以使用命令行中的
curl
发出请求并查看从节点服务器返回的JSON对象,当我点击localhost:8080
时,屏幕上会显示按钮(index.html)。
然而,当我尝试点击该按钮时,对XMLHttpRequest('GET', 'http://nodeapp/api', true)
的调用失败,似乎没有触及nodeapp
服务器(没有日志)。 我认为这是因为主机不理解http://nodeapp/api
。
有没有办法告诉docker,在容器运行时将其容器链接别名添加到我的hosts文件中?
我不知道我的问题是否是解决我的问题的正确方法。 看起来好像我收到了CORs错误返回,但我不认为它曾经触及过我的服务器。 这是否与从我的主机访问应用程序有关?
编辑:我注意到当使用堆栈时,单击按钮会从我的nginx容器中发送响应。 我不明白为什么它要通过该服务器进行路由,因为nodeapp
在我的hosts
文件中,所以它应该能够识别相关性?