Angular ng serve不在Docker容器中工作,但express.js可以

Angular ng serve不在Docker容器中工作,但express.js可以,angular,docker,wsl-2,Angular,Docker,Wsl 2,我读过类似的问题,但我不明白为什么我必须指定一个主机0.0.0.0来运行ng service。为了进行比较,我在同一个端口的同一个容器中运行了一个简单的脚本,其中包含express.js,在本例中,网站是在localhost:8080上运行的,而没有定义0.0.0.0 host 据我所知,这两台服务器(ng-serve和express.js)的工作方式相同。两者都在容器中运行,但只有express可以在浏览器中访问,我不明白为什么ngserve不是 复制步骤: 从CLI运行名为angular t

我读过类似的问题,但我不明白为什么我必须指定一个主机
0.0.0.0
来运行
ng service
。为了进行比较,我在同一个端口的同一个容器中运行了一个简单的脚本,其中包含express.js,在本例中,网站是在localhost:8080上运行的,而没有定义0.0.0.0 host

据我所知,这两台服务器(
ng-serve
express.js
)的工作方式相同。两者都在容器中运行,但只有express可以在浏览器中访问,我不明白为什么
ngserve
不是

复制步骤:

  • 从CLI运行名为
    angular test
    的LTS Node.js容器,并发布端口8080:4200
    docker容器运行——名称角度测试-it-v${PWD}:/app/-p8080:4200节点:lts/bin/bash
  • 连接到集装箱码头
    docker集装箱连接角度测试
  • 转到angular project并运行
    ng serve
  • 转到浏览器
    localhost:8080
    但返回“连接已重置页面加载时与服务器的连接已重置…”`
  • 停止
    ng发球
  • 运行
    node test express
    在同一端口上启动express.js服务器
    4200
  • 转到浏览器
    localhost:8080
    ,网站加载时没有任何问题,文本
    Express.js工作!
    可见
  • const express=require('express'))
    const app=express()
    常数端口=4200
    应用程序获取(“/”,(请求,请求)=>{
    res.send('Express.js works!')
    })
    应用程序侦听(端口,()=>{
    log(`示例应用程序正在侦听http://localhost:${port}`)
    })
    

    这可能无关紧要,但我正在使用Docker for Windows和WSL2(Windows 10 Pro)。

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

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

    如果未指定主机,Node.js会将未指定的IP地址设置为默认值
    0.0.0
    。如果您想知道默认的主机是什么,请在
    app.listen()
    内调用
    server.address()
    ,其中
    server
    是一个由扩展返回的对象

    const端口=4200;
    const server=app.listen(端口,()=>{
    console.log('App-listing at',server.address())
    })
    
    server.address()

    {地址:':',系列:'IPv6',端口:4200}
    

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

    我想这应该可以回答您的问题。不,我看到了这个线程,但它没有回答我的问题。为什么我必须为
    ng serve
    指定
    -h0.0.0
    ,而对于express.js来说这是不必要的?