Contexte: docker-compose pour démarrer plusieurs conteneurs, y compris Gunicorn qui appelle une application Flask. J'utilise un fichier d'environnement web/env.gunicorn
pour stocker ma configuration de démarrage Gunicorn. Ce fichier contient
GUNICORN_CMD_ARGS="--bind=127.0.0.1:8001 --workers=3"
Le problème est qu'il GUNICORN_CMD_ARGS
n'est pas traité correctement quelque part dans le pipeline. L'erreur que j'obtiens lors de l'exécution docker logs gunicorn
est
Error: '8001 --workers=3' is not a valid port number.
La question est, où dans ma configuration mes hypothèses sont-elles erronées, provoquant ainsi la modification de la variable d'environnement? La variable d'environnement est acceptée lorsqu'elle est exécutée manuellement dans un terminal. Le fichier de composition du docker se présente comme suit
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
la source
la source
GUNICORN_CMD_ARGS
set, et il l'a accepté correctement (nombre de travailleurs et adresse vérifiés). C'est pourquoi je suppose que le problème est du côté de Docker.ERROR: build path /home/ben/devopsStackExchange/web either does not exist, is not accessible, or is not a valid URL.
. Veuillez créer unsteps to reproduce paragraph
fichier et ajouter les fichiers requis afin que d'autres personnes puissent vous aider en leur permettant au moins de reproduire le problème.command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3
version, car les variables chargées viaenv_file
ne sont pas acceptées. Ils doivent déjà être définis dans le terminal appelant.Réponses:
Après avoir lu le chapitre des commandes et trouvé cet exemple , il semble que la coutume
GUNICORN_CMD_ARGS
pourrait être omise en passant simplement les arguments directement:Si l'on souhaite vraiment utiliser des variables, cela peut être fait comme suit:
.env
la source
env_file
. Puisque je ne pose aucun secret, c'est une solution acceptableJ'ai eu un problème similaire et cela a fonctionné pour moi sans qu'il ressemble à un hack ...
docker-compose.yml :
Remarque: ajoutez env GUNICORN_CMD_ARGS sans guillemets
Dockerfile :
Remarque: exécutez l'application CMD gunicorn: application sans passer d'options via un tableau ou des guillemets
la source