Contexto: docker-compose para iniciar varios contenedores, incluido Gunicorn que llama a una aplicación Flask. Estoy usando un archivo de entorno web/env.gunicorn
para almacenar mi configuración de inicio de Gunicorn. Este archivo contiene
GUNICORN_CMD_ARGS="--bind=127.0.0.1:8001 --workers=3"
El problema es que GUNICORN_CMD_ARGS
no se procesa correctamente en algún lugar de la tubería. El error que obtengo al ejecutar docker logs gunicorn
es
Error: '8001 --workers=3' is not a valid port number.
La pregunta es, ¿en qué parte de mi configuración están equivocados mis supuestos, lo que hace que la variable de entorno se destruya? La variable de entorno se acepta cuando se ejecuta manualmente en un terminal. El archivo de composición del acoplador se ve de la siguiente manera
version: "3"
services:
# nginx:
# image: nginx:latest
# ports:
# - "80:80"
# volumes:
# - ./nginx:/etc/nginx/conf.d
# depends_on:
# - web
web:
build: ./web
container_name: gunicorn
ports:
- "8001:8001"
environment:
- APP_CONFIG_FILE=../config/development.py
env_file:
- 'web/env.gunicorn'
networks:
- backend
command: gunicorn thymedata:app
depends_on:
- influxdb
- grafana
influxdb:
image: influxdb:latest
container_name: influxdb
ports:
- "8086:8086"
env_file:
- 'influxdb/env.influxdb'
- 'influxdb/secrets.influxdb'
networks:
- backend
volumes:
- influxdb-data:/var/lib/influxdb
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
env_file:
- 'grafana/env.grafana'
- 'grafana/secrets.grafana'
networks:
- backend
volumes:
- grafana-data:/var/lib/grafana
depends_on:
- influxdb
networks:
backend:
volumes:
influxdb-data:
grafana-data:
docker
docker-compose
Moritz
fuente
fuente
GUNICORN_CMD_ARGS
set, y lo aceptó correctamente (# de trabajadores y dirección marcada). Por eso supongo que el problema está del lado de Docker.ERROR: build path /home/ben/devopsStackExchange/web either does not exist, is not accessible, or is not a valid URL.
. Creesteps to reproduce paragraph
y agregue los archivos necesarios para que otras personas puedan ayudarlo al menos permitiéndoles reproducir el problema.command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3
versión, ya queenv_file
no se aceptan las variables cargadas a través de . Ya deben estar configurados en el terminal de llamada.Respuestas:
Después de leer el capítulo de comandos y encontrar este ejemplo , parece que la costumbre
GUNICORN_CMD_ARGS
podría omitirse simplemente pasando los argumentos directamente:Si realmente quisiera usar variables, entonces podría hacerse de la siguiente manera:
.env
fuente
env_file
. Como no guardo ningún secreto, es una solución aceptableTuve un problema similar y esto funcionó para mí sin que pareciera un truco ...
docker-compose.yml :
Nota: agregue env GUNICORN_CMD_ARGS sin comillas
Dockerfile :
Nota: ejecute la aplicación CMD gunicorn: aplicación sin pasar opciones a través de una matriz o comillas
fuente