部署在 docker 容器中的 Nginx 不会暴露部署在另一个 docker 容器中的 nuxtjs(502 Bad Gateway)
Posted
技术标签:
【中文标题】部署在 docker 容器中的 Nginx 不会暴露部署在另一个 docker 容器中的 nuxtjs(502 Bad Gateway)【英文标题】:Nginx deployed in docker container doesn't expose nuxtjs deployed in another docker container (502 Bad Gateway) 【发布时间】:2019-11-11 22:48:14 【问题描述】:我正在尝试使用 nginx 作为 docker 容器中的代理服务器来运行 nuxtjs 应用程序。所以,我有 2 个容器:nginx 和 nuxt
这是我构建 nuxt 应用程序的方式
FROM node:11.15
ENV APP_ROOT /src
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT
ADD . $APP_ROOT
RUN npm install
RUN npm run build
ENV host 0.0.0.0
结果似乎还不错
接下来是nginx配置
server
listen 80;
server_name dev.iceik.com.ua;
location /
proxy_pass http://nuxt:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
我也试过这个 nginx 配置
upstream nuxt
server nuxt:3000;
server
listen 80;
server_name dev.iceik.com.ua;
location /
proxy_pass http://nuxt;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
最后是我的 docker-compose 文件
version: "3"
services:
nuxt:
build: ./app/
container_name: nuxt
restart: always
ports:
- "3000:3000"
command:
"npm run start"
nginx:
image: nginx:1.17
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d
depends_on:
- nuxt
我可以从 nginx 容器 ping nuxt 容器
这里还有开放的端口
所以,预期的结果是我可以访问我的 nuxt 应用程序。 但是我得到 502 Bad Gateway
你知道为什么 nginx 不暴露我的 nuxt 应用吗?
感谢您的任何建议!
【问题讨论】:
请在访问dev.iceik.com.ua
时发布nginx错误日志
尝试curl -k -v http://nuxt:3000
检查端口3000是否打开
你好@ThanhNguyenVan 我已经更新了第一篇文章,其中添加了打开端口的屏幕截图。然而 curl -k -v nuxt:3000 检索 * 重建 URL 到:nuxt:3000 * 无法解析主机:nuxt * 关闭连接 0 curl:(6) 无法解析主机:nuxt 你明白为什么吗?
访问nginx
容器然后获取curl
检查您的 node.js 是否将端口 3000 公开到 0.0.0.0?
【参考方案1】:
Nodejs 公开localhost:3000
而不是0.0.0.0:3000
请改正。它会工作
【讨论】:
【参考方案2】:如果您的容器需要相互通信,将它们放入网络总是好的,另一种方法是使用主机网络(仅适用于 linux)。试试下面docker-compose.yml
他们应该可以通过容器名称互相交谈。
version: "3"
services:
nuxt:
build: ./app/
container_name: nuxt
restart: always
ports:
- "3000:3000"
command:
"npm run start"
networks:
- my_net
nginx:
image: nginx:1.17
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d
depends_on:
- nuxt
networks:
- my_net
networks:
my_net:
driver: "bridge"
【讨论】:
我按照您的建议修改了 docker-compose,但没有帮助。我还在文档中发现默认情况下 Compose 会为您的应用程序设置一个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问它们,并且它们可以通过与容器名称相同的主机名发现。以上是关于部署在 docker 容器中的 Nginx 不会暴露部署在另一个 docker 容器中的 nuxtjs(502 Bad Gateway)的主要内容,如果未能解决你的问题,请参考以下文章
使用 nginx 反向代理的 Docker 容器内的闪亮服务器不会遵循 301 重定向