Kontext: Docker-Compose zum Starten mehrerer Container, einschließlich Gunicorn, das eine Flask-App aufruft. Ich verwende eine Umgebungsdatei web/env.gunicorn
zum Speichern meiner Gunicorn-Startkonfiguration. Diese Datei enthält
GUNICORN_CMD_ARGS="--bind=127.0.0.1:8001 --workers=3"
Das Problem ist, dass GUNICORN_CMD_ARGS
irgendwo in der Pipeline nicht richtig verarbeitet wird. Der Fehler, den ich beim Laufen bekomme, docker logs gunicorn
ist
Error: '8001 --workers=3' is not a valid port number.
Die Frage ist, wo in meinem Setup meine Annahmen falsch sind, wodurch die Umgebungsvariable entstellt wird. Die Umgebungsvariable wird akzeptiert, wenn sie manuell in einem Terminal ausgeführt wird. Die Docker-Erstellungsdatei sieht wie folgt aus
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
quelle
quelle
GUNICORN_CMD_ARGS
, und es wurde ordnungsgemäß akzeptiert ( Anzahl der Arbeiter und Adresse überprüft). Deshalb nehme ich an, dass das Problem auf Dockers Seite liegt.ERROR: build path /home/ben/devopsStackExchange/web either does not exist, is not accessible, or is not a valid URL.
. Bitte erstellen Sie einesteps to reproduce paragraph
und fügen Sie die erforderlichen Dateien hinzu, damit andere Personen Ihnen helfen können, indem sie ihnen zumindest erlauben, das Problem zu reproduzieren.command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3
Version, da die über geladenen Variablenenv_file
nicht akzeptiert werden. Sie müssen bereits im anrufenden Terminal eingestellt sein.Antworten:
Nach dem Lesen des Befehlskapitels und dem Auffinden dieses Beispiels sieht es so aus, als
GUNICORN_CMD_ARGS
könnte der Brauch weggelassen werden, indem nur die Argumente direkt übergeben werden:Wenn man wirklich Variablen verwenden möchte, kann dies wie folgt erfolgen:
.env
quelle
env_file
. Da ich keine Geheimnisse setze, ist es eine akzeptable LösungIch hatte ein ähnliches Problem und das hat bei mir funktioniert, ohne dass es sich wie ein Hack anfühlte ...
docker-compose.yml :
Hinweis: Fügen Sie env GUNICORN_CMD_ARGS ohne Anführungszeichen hinzu
Dockerfile :
Hinweis: Führen Sie die CMD gunicorn App aus: App, ohne Optionen über Array oder Anführungszeichen zu übergeben
quelle