我正在标准节点docker容器内运行Aurelia应用,并且它正在侦听端口8080。在容器内,我已经测试了它是否正在使用curl
运行;并以预期的HTML响应。但是我无法通过主机(容器外部)上的映射端口访问应用程序。
我正在运行以下命令来启动容器
$ docker run -it --rm -p 8080:8080 -v ${PWD}:/app node bash
然后在容器中,安装cli并创建一个新应用
# npm install -g aurelia-cli
# au new
创建默认应用程序后,我cd
进入应用程序目录并运行该应用程序。
# au run
如上所述,我可以使用curl http://localhost:8080
验证应用程序是否正在运行。但是,在主机上,我无法访问该应用程序:
$ curl http://localhost:8888
curl: (52) Empty reply from server
最初,我认为这是一个码头工人问题。参见this question。但是事实证明,Aurelia正在监听localhost
而不是0.0.0.0
。
[我在Aurelia的论坛上找到this Q&A,这很有帮助,但是aurelia_project/tasks/run.js
没有他们讨论的opts
变量。我确实发现了aurelia_project/aurelia.json
,但是将localhost
更改为0.0.0.0
似乎没有什么不同。
最后我找到了webpack.config.js
,然后将host
对象内的devServer
属性从localhost
更改为0.0.0.0
,一切正常。
webpack.config.js
module.exports = ({ production } = {}, {extractCss, analyze, tests, hmr, port, host } = {}) => ({
... lots of other json ...,
devServer: {
contentBase: outDir,
// serve index.html for all 404 (required for push-state)
historyApiFallback: true,
hot: hmr || project.platform.hmr,
port: port || project.platform.port,
host: '0.0.0.0' || project.platform.host,
compress: true,
disableHostCheck: true
},
... lots of other json ...,
});