【问题标题】:ng serve not working in Docker container but express.js doesng serve 在 Docker 容器中不起作用,但 express.js 可以
【发布时间】: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 serveexpress.js)的工作方式相同。两者都在容器内运行,但只能在浏览器中访问 express,我很困惑为什么ng serve 不是。

重现步骤:

  1. 从 CLI 运行名为 angular-test 的 LTS Node.js 容器并发布端口 8080:4200
    docker container run --name angular-test -it -v ${PWD}:/app/ -p 8080:4200 node:lts /bin/bash
  2. 连接到容器的终端docker container attach angular-test
  3. 转到 Angular 项目并运行 ng serve
  4. 转到浏览器localhost:8080,但返回“连接已重置。与服务器的连接在页面加载时已重置。...`
  5. 停止ng serve
  6. 运行node test-express在同一端口4200上启动express.js服务器
  7. 转到浏览器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 则没有必要?

标签: angular docker wsl-2


【解决方案1】:

Express.js 使用 NodeJs 的方法
server.listen([port[, host[, backlog]]][, callback]) see documentation

如果省略主机,当 IPv6 可用时服务器将接受未指定 IPv6 地址 (::) 上的连接,否则接受未指定 IPv4 地址 (0.0.0.0) 上的连接。

如果未指定主机,Node.js 会将未指定的 IP 地址 ::0.0.0.0 设置为默认值。如果您想知道默认的主机,请在 app.listen() 中调用 server.address(),其中 server 是由 http.Server 返回的对象,它扩展了 net.Server

const port = 4200;
const server = app.listen(port, () => {
  console.log('App listening at', server.address())
})

server.address() 应该返回一个对象,在我的例子中是

{ address: '::', family: 'IPv6', port: 4200 }

现在很明显 express.js 正在监听 ::,而不是我预期的 localhost

【讨论】:

    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2022-07-15
    • 2019-11-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多