node.js – 如何从主机连接到docker容器的链接别名
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了node.js – 如何从主机连接到docker容器的链接别名,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1791字,纯文字阅读大概需要3分钟。
内容图文
我的dockerized应用程序有3个单独的部分:
> nodeapp:节点:运行expressjs应用程序的最新docker容器,从/ api访问时返回JSON对象.根据this site,该服务器也启用了COR.
> nginxserver:一个nginx:最新的静态服务器,它只是托管一个index.html文件,允许用户单击一个按钮,该按钮可以将XMLHttpRequest发送到上面的节点服务器.
>我的主机
节点:latest的端口通过3000:80暴露给主机.
nginx:latest的端口通过8080:80暴露给主机.
从主机我可以单独访问nodeapp和nginxserver:我可以使用命令行中的curl发出请求并查看从节点服务器返回的JSON对象,当我点击时,屏幕上会显示按钮(index.html)本地主机:8080.
但是,当我尝试单击按钮时,对XMLHttpRequest(‘GET’,’http:// nodeapp / api’,true)的调用失败,而不会看似命中nodeapp服务器(不存在日志).我假设这是因为主机不理解http:// nodeapp / api.
有没有办法告诉docker在容器运行时添加其容器链接别名到我的hosts文件?
我不知道我的问题是否是我问题的正确解决方案.看起来好像我收到了一个CORs错误,但我认为它不会碰到我的服务器.这与从我的主机访问应用程序有关吗?
Here is a link to an example repo
编辑:我注意到使用堆栈时单击按钮会从我的nginx容器发送响应.我很困惑为什么它通过该服务器进行路由,因为nodeapp在我的hosts文件中,所以它应该识别那里的相关性?
解决方法:
问题:
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.yml中,nodeapp服务端口80在家庭网络中暴露为3000,可以直接访问.
好的解决方案
您需要重新设计服务堆栈,将nginxserver作为前端节点,请参阅一个示例http://schempy.com/2015/08/25/docker_nginx_nodejs/
内容总结
以上是互联网集市为您收集整理的node.js – 如何从主机连接到docker容器的链接别名全部内容,希望文章能够帮你解决node.js – 如何从主机连接到docker容器的链接别名所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。