Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

257
Vistas
Docker nginx no se puede conectar al gunicorn ascendente que se ejecuta en un contenedor separado

He probado varias opciones, por ejemplo, expose , bridge , opciones de networks de docker-compose pero no puedo hacer que funcione con la conexión nginx a gunicorn ascendente ejecutándose en un contenedor separado, recibo el error 502 Bad Gateway de nginx. No estoy seguro de lo que me estoy perdiendo exactamente. A continuación se muestra mi archivo docker-compose :

 version: "3" services: web: build: . container_name: web command: bash -c "/start_web.sh" restart: always depends_on: - worker ports: - "80:80" - "443:443" worker: build: . container_name: worker command: bash -c "/start_worker.sh" restart: always ports: - "8000:8000"

conferencia de nginx:

 upstream worker { server 127.0.0.1:8000; } server { listen 80 default_server; location / { proxy_http_version 1.1; proxy_buffering off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Url-Scheme $scheme; proxy_redirect off; # Mitigate httpoxy attack proxy_set_header Proxy ""; proxy_pass http://worker; } }

Configuración de gunicornio:

 import multiprocessing import os bind = '127.0.0.1:8000' default_workers = multiprocessing.cpu_count() * 2 + 1 workers = os.getenv('GUNICORN_WORKERS', os.getenv('WEB_CONCURRENCY', default_workers)) worker_class = 'tornado' # This is to fix issues with compressor package: broken offline manifest for # custom domain. It randomly breaks, I think because of global variable inside. preload_app = True timeout = 200 graceful_timeout = 60 max_requests = 250 max_requests_jitter = max_requests accesslog = '/tmp/gunicorn_access.log' errorlog = '/tmp/gunicorn_error.log'

Archivos ini de circo:

web.ini

 [watcher:nginx] cmd = /usr/sbin/nginx stop_signal = QUIT

trabajador.ini

 [watcher:gunicorn] cmd = /usr/local/bin/gunicorn test:app -c /etc/gunicorn/app.py working_dir = /opt/app copy_env = True uid = www-data

El código completo está disponible en github y en el repositorio docker_test para que puedas probarlo fácilmente.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Configuración de Gunicon:

 bind = '127.0.0.1:8000'

Esto se vinculará a la interfaz de loopback (solo localhost), cámbielo a 0.0.0.0 para vincularse a todas las interfaces disponibles en el contenedor. Esto lo hará accesible desde nginx.

Configuración de Nginx:

 upstream worker { server 127.0.0.1:8000; }

Debe cambiar la IP de loopback a DNSname/IP del contenedor del trabajador. Recomiendo crear una red definida por el usuario. Luego, coloque todos los contenedores relacionados en esa red y llámelos por nombres DNS. No tendrá DNS interno en la red de puente predeterminada, por lo que seguir la configuración de nginx no funcionará.

 upstream worker { server worker:8000; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda