Perché la variabile di ambiente è alterata nella finestra mobile comporre il file di ambiente


10

Contesto: docker-compose per avviare diversi container, incluso Gunicorn che chiama un'app Flask. Sto usando un file di ambiente web/env.gunicornper memorizzare la mia configurazione di avvio di Gunicorn. Questo file contiene

GUNICORN_CMD_ARGS="--bind=127.0.0.1:8001 --workers=3"

Il problema è che GUNICORN_CMD_ARGSnon viene elaborato correttamente da qualche parte nella pipeline. L'errore che ricevo quando corro docker logs gunicornè

Error: '8001 --workers=3' is not a valid port number.

La domanda è: dove nella mia configurazione sono sbagliati i miei presupposti, causando in tal modo la modifica della variabile d'ambiente? La variabile di ambiente viene accettata quando eseguita manualmente in un terminale. Il file di composizione della finestra mobile appare come segue

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:

Non usando gunicorn, ma leggendo il documento non c'è nessun = esci dalla nota sulla variabile env. Proverei con uno spazio, ma sembra che non analizzi correttamente gli argomenti multipli e come tale è forse un bug in gunicorn (invertire l'ordine degli argomenti per terminare con l'argomento bind può essere una soluzione alternativa o mostrare il problema di divisione con parametro dei lavoratori)
Tensibai,

Ho provato a cambiare l'ordinamento dei parametri, ma non mi è stato di aiuto. Ho anche provato ad avviare Gunicorn dalla riga di comando con GUNICORN_CMD_ARGSset, e lo ha accettato correttamente (numero di lavoratori e indirizzo controllato). Ecco perché suppongo che il problema sia dalla parte di Docker.
Moritz,

ERROR: build path /home/ben/devopsStackExchange/web either does not exist, is not accessible, or is not a valid URL.. Si prega di creare un steps to reproduce paragraphe aggiungere i file richiesti in modo che altre persone possano aiutarti aiutandoli almeno a riprodurre il problema.
030

Aggiungi almeno il Dockerfile Gunicorn.
030

Non uso un Dockerfile Gunicorn. Continuerò con la command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3versione, poiché le variabili caricate tramite env_filenon sono accettate. Devono essere già impostati nel terminale di chiamata.
Moritz,

Risposte:


2

Dopo aver letto il capitolo dei comandi e aver trovato questo esempio , sembra che l'abitudine GUNICORN_CMD_ARGSpossa essere omessa semplicemente passando gli argomenti direttamente:

command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3

Se si desidera davvero utilizzare le variabili, si potrebbe fare come segue:

command: gunicorn thymedata:app --bind=${GUNICORN_BIND_ADDRESS} --workers=${GUNICORN_WORKERS}

.env

GUNICORN_BIND_ADDRESS=127.0.0.1:8001
GUNICORN_WORKERS=3

$ {GUNICORN_BIND_ADDRESS} valuterà solo le variabili già presenti nel terminale, nessuna caricata tramite env_file. Dal momento che non ho segreti, è una soluzione accettabile
Moritz,

3

Ho avuto un problema simile e questo ha funzionato per me senza che mi sembrasse un trucco ...

docker-compose.yml :

version: '3'
services:
   web:
      build .
      environment:
      - GUNICORN_CMD_ARGS=--workers=0 --bind=0.0.0.0:8000 --timeout=10

Nota: aggiungi env GUNICORN_CMD_ARGS senza virgolette

File Docker :

FROM python:3.6-slim
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
ENV GUNICORN_CMD_ARGS="--bind=0.0.0.0:8000 --workers=3"
CMD gunicorn app:app

Nota: esegui l'app CMD gunicorn: app senza passare opzioni tramite array o virgolette

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.