[docker] 解决 docker 部署访问提示 Empty reply from server,但是本地运行能够正常访问

起因

最近通过 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 的访问,所以这样才可以联通外部访问

参考:
nestjs 官方文档
fastify 文档
0.0.0.0 与 127.0.0.1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了让 Docker 容器中的服务能够访问本地 MySQL,你需要进行以下几个步骤: 1. 确认本地 MySQL 的 IP 地址 在本地命令行中输入以下命令: ``` ipconfig ``` 在输出中找到你的本地 IP 地址。通常情况下,你可以找到类似于 `192.168.x.x` 或者 `172.x.x.x` 的 IP 地址。 2. 创建 Docker 网络 在 Docker 中,可以使用自定义网络来让容器之间进行通信。你可以使用以下命令来创建一个自定义网络: ``` docker network create my-network ``` 其中,`my-network` 是你要创建的网络名称。 3. 启动 Docker 容器并连接到自定义网络 在启动 Docker 容器时,你需要将容器连接到自定义网络,并指定本地 MySQL 的 IP 地址。你可以使用以下命令来启动容器并连接到自定义网络: ``` docker run --name my-container --network my-network -e DB_HOST=192.168.x.x -d my-image ``` 其中,`my-container` 是你要启动的容器名称,`my-network` 是你要连接的自定义网络名称,`DB_HOST` 是你要指定的本地 MySQL 的 IP 地址,`my-image` 是你要使用的 Docker 镜像。 在容器中,你可以使用 `$DB_HOST` 环境变量来访问本地 MySQL。例如,如果你要使用 Node.js 连接本地 MySQL,可以使用以下代码: ```javascript var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.DB_HOST, user : 'root', password : 'password', database : 'my-db' }); ``` 需要注意的是,为了让容器能够访问本地 MySQL,你需要在本地防火墙中开放 MySQL 的端口(默认是 3306 端口)。 以上就是让 Docker 容器访问本地 MySQL 的方法。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值