node.js - 为什么我通过 docker 运行 Nginx 时返回 502 错误
问题描述
我在端口 1337 上有一个节点 js 应用程序。我正在尝试通过 nginx 和 docker 为其添加反向代理。我正在创建以下 DOCKERFILE:
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]
我对 nginx 的配置:
events{
worker_connections 50000;
}
http {
server {
listen 80;
location / {
proxy_pass http://localhost:1337;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
我运行了这些命令:
docker build -t back-nginx-docker .
docker run -d -p 80:80 back-nginx-docker
然后我收到错误 502 :(
解决方案
您的 docker-container 在他自己的网络中运行。它无法与主机上的端口通信。
要更改它,您可以执行以下步骤之一:
使用主机网络
您可以在主机网络中启动您的 docker-container(但它不适用于 Windows)。~ docker run -d -p 80:80 --network=host back-nginx-docker
使用 host-ip 而不是 localhost
获取 docker-network-adapter 的 ip。~ docker network inspect bridge --format='{{(index .IPAM.Config 0).Gateway}}'
并在你的 nginx.conf 中使用它。通常是
172.17.0.1
。location / { proxy_pass http://172.17.0.1:1337; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
0.0.0.0:1337
仅当您的节点应用程序将侦听而不是侦听时,它才会起作用127.0.0.1:1337
更好的是,当您使用环境变量而不是“硬编码”地址时。
推荐阅读
- javascript - 使用 forEach 检查 JavaScript 数组是否相等
- symfony - Symfony Twig - 想要根据日期修改背景
- python - 使用 BytesIO 作为 subprocess.run 的 stdout/stderr 目标
- wordpress - Wordpress WPMl 插件无法正常工作
- android - Android Kotlin:Groupie Recycler查看添加到同一个可扩展项目的所有项目
- ios - 缺少 SNS Apple 平台交付失败日志
- html - 正文 rtl 或 ltr 时更改跨度图标
- javascript - 我想使用 reactJS 替换段落中的一个单词
- xcode - 尝试更新变量 SwiftUI Instagram 教程时出现线程 1 错误
- mysql - Laravel 模型用户状态统计