nginx docker 容器如何访问宿主机的 golang 程序
如题,我们在部署 Golang 代码时,没有通过打包 Go 代码到容器镜像,而是直接部署编译后的代码到服务端。但我们的服务器环境是跑在容器上的,也就是 Nginx 是在容器里。如果不考虑容器,那部署 Nginx 的配置应该如下方所示:

server {
server_name your_domain;
location / {
proxy_pass http://127.0.0.1:9990;
}
}当我们按上方的配置部署时,就无法访问了,就算 GO 自己启动了通过 localhost:9990 能访问,但通过 Nginx your_domain 就不行,折腾了一会儿,后来想明白了。
上面代码里的 proxy_pass 对应的 127.0.0.1,实际上是 Nginx 所在容器的 127.0.0.1,而 GO 没有在容器里,创建服务后,是跑在宿主机上的,因此,没法跑通。
有了大思路,通过以下方式能跑通:
server {
server_name your_domain;
location / {
proxy_pass http://192.168.31.61:9990;
}
}上方代码里的 192.168.31.61 宿主机的 ip,因此可以直接访问到。