nginx - 如何使用 GCP 和 NGINX 修复 502 Bad Gateway 错误
问题描述
我正在尝试遵循有关在 GCP vm 实例上创建 Apache Airflow 管道的教程(https://towardsdatascience.com/10-minutes-to-building-a-machine-learning-pipeline-with-apache-airflow- 53cd09268977)但是在构建并运行 docker 容器之后,当尝试使用以下命令访问网络服务器时,我在 Nginx 1.14 中收到此“502 Bad Gateway”错误:
http://<VM external ip>/
我对使用 GCP 很陌生,不知道如何解决这个问题。
一些在线研究建议将 NGINX 配置文件编辑为:
keepalive_timeout 650;
keepalive_requests 10000;
但这并没有改变任何东西。
GCP 实例是 N1-standard-8,带有 Ubuntu 18.04,并启用了云、HTTPS 和 HTTP 访问。
启用的 Nginx 站点是:
server {
listen 80;
location / {
proxy_pass http://0.0.0.0:8080/;
}
}
解决方案
根本原因:
您遇到的问题与keepalives无关,它更简单 - docker容器退出并且没有运行,因此当nginx尝试将您的请求代理到容器中时,它会失败并因此出现错误。所述失败是由于气流与当前版本的 sqlalchemy 不兼容。
验证:
运行此命令查看失败容器的日志
sudo docker logs `sudo docker ps -a -f "ancestor=greenr-airflow" --format '{{.ID}}'`
你会看到容器内的python导入包失败,报如下错误:
No module named 'sqlalchemy.ext.declarative.clsregistry'
解决方案:
虽然我严格按照教程进行操作,但我建议不要使用 sudo 运行命令,您可能希望稍微偏离教程,以免这样做。
跑步前
sudo docker build -t greenr-airflow:latest .
命令,编辑 Dockerfile 文件并添加以下两行
&& pip install SQLAlchemy==1.3.23 \
&& pip install Flask-SQLAlchemy==2.4.4 \
在正在安装的软件包列表中的某个位置,我在之后添加了它
&& pip install -U pip setuptools wheel \
这是撰写本文时的第 54 行。
如果您想重复使用相同的实例,请在更改文件后删除并重建图像:
sudo docker rmi greenr-airflow
sudo docker build -t greenr-airflow:latest .
推荐阅读
- python - 按组返回到最近点的距离 - python
- reactjs - 我可以在没有缓存策略的情况下使用 apollo 客户端的反应变量吗?
- sql - 将同一用户的结果合并为一个结果
- google-chrome - 是否有人在 Chrome 87.0.4280.88 中也收到此错误?
- oauth-2.0 - 如何使用 lua 从鬣蜥访问受 Oauth2 保护的 API
- javascript - OpenLayer Bing 地图导入错误 - Wordpress
- sharepoint - SPfx 连接到共享点上下文时出错
- python - 如何在excel表中追加并进一步处理
- apache-kafka - 无法解码 Spring Cloud 流 DefaultKafkaHeaderMapper 中的 json 类型
- python - 什么是相当于 R 的`with`的python/pandas?