【发布时间】:2021-04-29 19:39:44
【问题描述】:
我读过类似的问题ng serve not working in Docker container,但我不明白为什么我必须指定主机0.0.0.0 才能运行ng serve。为了比较,我在同一个容器的同一个端口上运行了一个带有 express.js 的简单脚本,在这种情况下,网站在 localhost:8080 没有定义 0.0.0.0 主机。
据我了解,两台服务器(ng serve 和 express.js)的工作方式相同。两者都在容器内运行,但只能在浏览器中访问 express,我很困惑为什么ng serve 不是。
重现步骤:
- 从 CLI 运行名为
angular-test的 LTS Node.js 容器并发布端口 8080:4200docker container run --name angular-test -it -v ${PWD}:/app/ -p 8080:4200 node:lts /bin/bash - 连接到容器的终端
docker container attach angular-test - 转到 Angular 项目并运行
ng serve - 转到浏览器
localhost:8080,但返回“连接已重置。与服务器的连接在页面加载时已重置。...` - 停止
ng serve - 运行
node test-express在同一端口4200上启动express.js服务器 - 转到浏览器
localhost:8080,网站加载没有任何问题,文字Express.js works!可见
const express = require('express')
const app = express()
const port = 4200
app.get('/', (req, res) => {
res.send('Express.js works!')
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
这可能没关系,但我正在使用带有 WSL2(Windows 10 Pro)的 Docker for Windows。
【问题讨论】:
-
我猜这应该能回答你的问题。 stackoverflow.com/a/52425925/8692369
-
不,我看过这个帖子,但它没有回答我的问题。为什么我必须为
ng serve指定-h 0.0.0.0而对于 express.js 则没有必要?