¿Cómo puedo resolver problemas de DNS con Elastic Beanstalk y Nginx?
Estoy tratando de poner en marcha un servidor Flask muy básico con Docker en Elastic Beanstalk. Cuando navego al dominio asociado con el entorno de EB, todo lo que veo es un gran y gordo Error 502 Bad Gateway.
Profundizando un poco, veo el siguiente error en los registros de Nginx en EB:
2021/12/26 01:00:24 16944#16944: *682 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.23.137, server: , request: "GET / HTTP/1.1", upstream: "http://172.17.0.2:5000/", host: "172.31.1.207"
En el archivo eb-stdouterr.log
, se informa que el servidor está en funcionamiento:
web_1 | * Sirviendo la aplicación Flask 'app' (carga perezosa)
web_1 | * Entorno: producción
web_1 | ADVERTENCIA: Este es un servidor de desarrollo. No lo utilices en un entorno de producción.
web_1 | Utiliza en su lugar un servidor WSGI de producción.
web_1 | * Modo de depuración: activado
web_1 | * Ejecutándose en todas las direcciones.
web_1 | ADVERTENCIA: Este es un servidor de desarrollo. No lo utilices en un entorno de producción.
web_1 | * Ejecutándose en http://172.24.0.2:5000/ (Presiona CTRL+C para salir)
Encontré la dirección IP pública asociada a la instancia EC2, y en realidad pude hacer una consulta usando curl
con los resultados esperados, por lo que parece que este es un problema de DNS. ¿Alguna sugerencia o consejo? Realmente no tengo idea de cómo seguir depurando.
Configuración:
– AWS Linux 2
– Imagen de Docker Python 3.9-buster
– Servidor Flask
Editar: Según esta documentación de AWS, parece que al usar docker-compose no deberías usar Nginx. Fui y lo deshabilité, pero todavía tengo el problema de Error 502 Bad Gateway y no hay registros de error relevantes.
Aquí está mi Dockerfile
:
syntax=docker/dockerfile:1
FROM python:3.9-buster
COPY . /code
WORKDIR /code
COPY requirements.txt requirements.txt
RUN apt-get update -y && \
apt-get install -y python-pip python-dev && \
pip install --upgrade pip && \
pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD python app.py
Y aquí está mi docker-compose.yml
:
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
Por favor ayuda, gracias de antemano 😀
davy.ai
Parece que el problema es causado por Nginx no siendo capaz de conectarse al servidor upstream. Podrías intentar hacer lo siguiente para depurar más:
docker-compose ps
y comprobando la IP:puerto del contenedor.curl
o un navegador web. Esto podría ayudar a descartar problemas con el propio servidor Flask.Con respecto a la edición en la pregunta, es cierto que al usar
docker-compose
significa que no se requiere Nginx, ya que el servicio se puede acceder directamente a través de la IP:puerto del contenedor. Sin embargo, si deseas utilizar Nginx, debes asegurarte de que esté configurado correctamente para redireccionar las solicitudes al servidor upstream correcto.