使用 nginx + 节点 + 主机 docker堆栈时,我有一个小型示例项目located here that illustrates the problem I am seeing。
我有2个容器:
3000:80
index.html
)提供静态内容(main.js
和/usr/shared/nginx/html
文件)。其端口通过8080:80
发布。 从主机单独运行容器时,我可以访问节点服务器并查看返回的JSON对象。当我访问nginx服务器时,我看到index.html
并且main.js
的javascript代码已经运行。
现在我将节点应用程序容器链接到nginx服务器容器。在 nginx 容器的main.js
文件中,我尝试访问http://nodeapp/api
处的服务器。我看到了CORs错误
XMLHttpRequest无法加载http://nodeapp/api。没有 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许来源“http://localhost:8080” 访问。
奇怪的是,响应标题表示它来自nginx和不我的快递应用程序正如我所料。 nginx容器也没有记录任何内容。
如果我将XMLHttpRequest的url更改为节点容器的IP(例如172.17.0.2),它按预期工作和响应头表明它来自快速服务器。在我的/etc/hosts
文件中有一个条目:
172.17.0.2 nodeapp abc123ContainerId quickserve_nodeapp_run_1
当我curl
来自交互式tty容器的节点容器时,它也按预期工作。
如果我加载节点容器并使用http-server
(主机上的服务器),它按预期工作和响应标头表明它来自快速服务器。
答案 0 :(得分:0)
以防它有一个包含,old thread (2013)在docker守护进程中提到了一个cor选项。
如今(2015年第4季度),docker daemon包括:
--api-cors-header="" Set CORS headers in the remote API
要在远程api中设置跨源请求,请在守护进程模式下运行Docker时为
--api-cors-header
赋值。 Set *(星号)允许全部,默认或空白表示CORS禁用
$ docker -d -H="192.168.1.9:2375" --api-cors-header="http://foo.bar"
这可能是您的情况下使用的设置。