起因
最近通过 Docker 部署 Nestjs 应用的时候发现,本地运行起来好好的应用,但是部署到 docker 中访问就提示 Empty reply from server。
解决
通过一番折腾,发现默认 fastify 监听的只有 127.0.0.1 端口,导致 docker 无法接收其他主机的请求,所以才会出现这个问题。通过手动指定监听 host 为 0.0.0.0 即可解决此问题
为什么 docker 中 0.0.0.0 才能被其他的主机连接?
因为 docker 中容器网络是相互隔离的,所以 127.0.0.1 代表的不是本机,是 此容器的意思,这会让这个容器里面可以访问到这个地址,但是容器外部(其他的主机)却无法访问。
但是 0.0.0.0 标识的是监听所有端口,或者是缺省的监听地址,这样也会接收来自 eth0 的访问,所以这样才可以联通外部访问