क्यों पर्यावरण चर docker रचना पर्यावरण फ़ाइल में उलझ गया है


10

प्रसंग: कई कंटेनरों को शुरू करने के लिए डॉकटर-कंपोज़, जिसमें Gunicorn भी शामिल है, जो एक फ्लास्क ऐप कहता है। मैं web/env.gunicornअपने Gunicorn स्टार्टअप कॉन्फ़िगरेशन को संग्रहीत करने के लिए एक पर्यावरण फ़ाइल का उपयोग कर रहा हूं । इस फ़ाइल में है

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

समस्या यह है कि GUNICORN_CMD_ARGSपाइपलाइन में कहीं भी सही तरीके से संसाधित नहीं किया गया है। दौड़ते समय जो त्रुटि मुझे होती docker logs gunicornहै

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

सवाल यह है कि मेरे सेटअप में मेरी धारणाएँ गलत कहाँ हैं, जिससे पर्यावरण परिवर्तन का कारण बन सकता है? टर्मिनल में मैन्युअल रूप से चलाने पर पर्यावरण चर स्वीकार किया जाता है। डॉक कम्पोज़ फ़ाइल निम्नानुसार दिखती है

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:

Gunicorn का उपयोग नहीं कर रहा है, लेकिन dv को पढ़ रहा है = env चर के बारे में नोट पर कोई हस्ताक्षर नहीं है। मैं एक जगह के साथ कोशिश करूँगा, लेकिन ऐसा लगता है कि यह ठीक से तर्क को गुणा नहीं करता है और जैसा कि शायद एक बग में होता है गुनकोर्न (बाँध तर्क द्वारा समाप्त करने के लिए तर्क आदेश प्राप्त करने के लिए एक समाधान हो सकता है या विभाजन की समस्या का प्रदर्शन कर सकता है) वर्कर्स पैरामीटर)
तेनसीबाई

मैंने मापदंडों के क्रम को बदलने की कोशिश की, लेकिन इससे कोई फायदा नहीं हुआ। मैंने GUNICORN_CMD_ARGSसेट के साथ कमांड लाइन से गुनिकॉर्न शुरू करने की भी कोशिश की , और इसे ठीक से स्वीकार कर लिया (# श्रमिकों और पते की जांच की)। इसलिए मुझे लगता है कि समस्या डॉकर की तरफ है।
मोरिट्ज़

ERROR: build path /home/ben/devopsStackExchange/web either does not exist, is not accessible, or is not a valid URL.। कृपया steps to reproduce paragraphआवश्यक फ़ाइलें बनाएँ और उन्हें जोड़ें ताकि अन्य लोग कम से कम आपकी मदद कर सकें जिससे उन्हें समस्या को पुन: उत्पन्न करने में मदद मिल सके।
030

कृपया कम से कम Gunicorn Dockerfile जोड़ें।
०३० 0

मैं एक Gunicorn Dockerfile का उपयोग नहीं करता। मैं command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3संस्करण से चिपक जाऊंगा, क्योंकि चर जिस पर लोड env_fileकिए गए हैं स्वीकार नहीं किए जाते हैं। उन्हें कॉलिंग टर्मिनल में पहले से ही सेट किया जाना है।
मोरिट्ज़

जवाबों:


2

आदेशों के अध्याय को पढ़ने और इस नमूने को खोजने के बाद , ऐसा लगता है कि कस्टम GUNICORN_CMD_ARGSको सीधे तर्कों को पारित करके छोड़ा जा सकता है:

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

यदि कोई वास्तव में चर का उपयोग करना चाहता है, तो इसे निम्नानुसार किया जा सकता है:

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} केवल टर्मिनल में पहले से ही चर का मूल्यांकन करेगा, जो कि किसी भी माध्यम से लोड नहीं किया गया है env_file। चूँकि मैंने कोई रहस्य निर्धारित नहीं किया है, यह एक स्वीकार्य समाधान है
Moritz

3

मुझे भी इसी तरह की समस्या थी और यह मेरे लिए एक हैक की तरह महसूस किए बिना काम करती थी ...

docker-compose.yml :

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

नोट: उद्धरण के बिना env GUNICORN_CMD_ARGS जोड़ें

Dockerfile :

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

नोट: CMD gunicorn ऐप चलाएं: ऐरे या कोट्स के माध्यम से विकल्पों को पास किए बिना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.