Error de servidor interno de Docker Compose Nginx

Tengo una aplicación de flask que quiero hospedar en nginx en mi archivo de compostura de docker pero cuando lo hago me da una Internal Server error

Aquí hay algunos archivos importantes:

docker-compose.yml

version: "3.8"

services:
  th3pl4gu3:
    container_name: portfolix
    build: ./
    networks:
      - portfolix_net
    ports:
      - 8084:8084
    restart: always

  server:
    image: nginx:1.17.10
    container_name: nginx
    depends_on:
      - th3pl4gu3
    volumes:
      - ./reverse_proxy/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
    networks:
      - portfolix_net

networks:
  portfolix_net:
    name: portfolix_network
    driver: bridge

nginx.conf:

server {
listen 80;

location / {
    include uwsgi_params;
    uwsgi_pass th3pl4gu3:8084;
}
}

Flask Dockerfile

# Using python 3.8 in Alpine
FROM python:3.8-alpine3.11

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Dependencies for uWSGI
RUN apk add python3-dev build-base linux-headers pcre-dev && pip install -r requirements.txt && apk update

# In case bash is needed
#RUN apk add --no-cache bash

# Tell the port number the container should expose
EXPOSE 8084

# Run the command
ENTRYPOINT ["uwsgi", "app.ini"]

app.ini

[uwsgi]
module = run:app

master = true
processes = 5

http-socket = 0.0.0.0:8084
chmod-socket = 660
vacuum = true

die-on-term = true

Ahora cuando ejecuto este docker-compose sin el servicio nginx, funciona, pero quiero que funcione en el servidor nginx. ¿Alguna idea de por qué estoy obteniendo el Error de Servidor Interno?

Pregunta hecha hace 3 años, 4 meses, 27 días - Por codealchemy


3 Respuestas:

  • Fui capaz de resolverlo con la siguiente combinación de docker:

    version: "3.8"
    
    services:
      th3pl4gu3:
        container_name: portfolix
        build: ./
        networks:
          - portfolix_net
        expose:
          - 8084
        restart: always
    
      server:
        image: nginx:1.17.10
        container_name: nginx
        depends_on:
          - th3pl4gu3
        volumes:
          - ./reverse_proxy/nginx.conf:/etc/nginx/nginx.conf
        ports:
          - 8084:80
        networks:
          - portfolix_net
    
    networks:
      portfolix_net:
        name: portfolix_network
        driver: bridge
    

    El problema fue con mi 8084:8084

    Respondida el Dec 18, 2020 a las 12:39 - por markupmaestro

    Votos positivos: 0 | Votos negativos: 0

  • El error de servidor interno en este caso puede deberse a una incompatibilidad en la configuración de Nginx y uWSGI. Revisando tus archivos proporcionados, veo que estás intentando utilizar uWSGI para comunicar Nginx con tu aplicación Flask. Aquí hay algunas sugerencias para solucionar el problema:

    • Verifica que uWSGI está iniciando correctamente: Asegúrate de que tu imagen Docker que ejecuta la aplicación Flask con uWSGI esté funcionando correctamente. Puedes probar ejecutando la imagen de forma independiente para asegurarte de que no haya problemas en ella.
    • Revisa la configuración de uWSGI: Verifica que el archivo app.ini esté correctamente configurado para comunicarse con tu aplicación Flask. Asegúrate de que el módulo especificado sea el correcto y que el puerto y la IP sean los adecuados.
    • Verifica la configuración de Nginx: Revisa el archivo nginx.conf y asegúrate de que estés apuntando al servidor uWSGI correctamente. En este caso, la línea `uwsgi_pass th3pl4gu3:8084;` indica que Nginx debe redirigir las solicitudes al contenedor de uWSGI llamado "th3pl4gu3" en el puerto 8084.
    • Habilita logs para el debugging: Puedes agregar directivas de logging en Nginx para obtener más información sobre lo que está ocurriendo. Puedes añadir log de errores y acceder para ver qué está causando el error interno del servidor.

    Una vez que hayas revisado estos puntos, intenta volver a ejecutar tu aplicación y revisa los logs para obtener más detalles sobre el error. Esto te ayudará a identificar con más precisión cuál es el problema y cómo solucionarlo.

    Respondida el Dec 19, 2020 a las 12:37 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Hay algunos problemas potenciales que podrían estar causando el error de servidor interno:

    Puertos expuestos: Verifica que el puerto 8084 esté expuesto en el contenedor Flask. En tu Dockerfile, asegúrate de tener EXPOSE 8084. Configuración de Nginx: Revisa tu archivo nginx.conf. La directiva uwsgi_pass debe apuntar al nombre del contenedor Flask y al puerto expuesto. Debería verse como uwsgi_pass th3pl4gu3:8084;. Dependencias de Flask: Asegúrate de que todas las dependencias necesarias para tu aplicación Flask estén instaladas en el contenedor. En tu Dockerfile, verifica que la instalación de pip en RUN apk add ... && pip install -r requirements.txt haya finalizado correctamente. Aplicación Flask: Revisa tu aplicación Flask para asegurarte de que se esté ejecutando correctamente y devolviendo respuestas válidas. Puedes intentar iniciar la aplicación fuera de Docker para verificar si funciona como se espera.

    Solución de problemas adicionales:

    Verifica los registros: Ejecuta docker-compose logs para ver los registros de ambos contenedores. Esto puede proporcionar información sobre errores o problemas. Reinicia los contenedores: Intenta reiniciar los contenedores con docker-compose restart. Usa la imagen oficial de Flask:* Considera usar la imagen oficial de Flask en Docker Hub. Esto puede garantizar que tu contenedor tenga la configuración y dependencias correctas.

    Si aún tienes problemas, proporciona los registros de los contenedores para un análisis más detallado.

    Respondida el Dec 19, 2020 a las 12:51 - por Gemini

    Votos positivos: 0 | Votos negativos: 0