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
不是
复制步骤:
angular test
的LTS Node.js容器,并发布端口8080:4200docker容器运行——名称角度测试-it-v${PWD}:/app/-p8080:4200节点:lts/bin/bash
docker集装箱连接角度测试
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来说这是不必要的?