เหตุใดตัวแปรสภาพแวดล้อมจึงถูกรวมไว้ในไฟล์สภาพแวดล้อมของนักเทียบท่า


10

บริบท: นักเทียบท่าเขียนเพื่อเริ่มภาชนะบรรจุหลายแห่งรวมถึง Gunicorn ที่เรียกใช้แอพ Flask ฉันใช้ไฟล์สภาพแวดล้อม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 แต่การอ่านเอกสารนั้นไม่มี = ออกจากโน้ตที่เกี่ยวกับตัวแปร env ฉันพยายามเว้นวรรค แต่ดูเหมือนว่ามันไม่ได้แยกอาร์กิวเมนต์อย่างถูกต้องทวีคูณและเป็นเช่นนี้อาจเป็นข้อผิดพลาดใน gunicorn (การกลับคำสั่งอาร์กิวเมนต์เพื่อจบโดยอาร์กิวเมนต์ bind อาจเป็นวิธีแก้ปัญหาหรือแสดงปัญหาแยกด้วย พารามิเตอร์คนงาน)
Tensibai

ฉันลองเปลี่ยนลำดับของพารามิเตอร์ แต่นั่นก็ไม่ได้ช่วย ฉันยังลองเริ่มต้น Gunicorn จากบรรทัดคำสั่งด้วยGUNICORN_CMD_ARGSชุดและยอมรับมันอย่างถูกต้อง (จำนวนคนงานและที่อยู่ที่ตรวจสอบแล้ว) นั่นเป็นเหตุผลที่ฉันคิดว่าปัญหาอยู่ที่ด้านข้างของ Docker
Moritz

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
030

ฉันไม่ได้ใช้ Gunicorn Dockerfile ฉันจะยึดcommand: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3เวอร์ชันเนื่องจากตัวแปรที่โหลดผ่านenv_fileไม่เป็นที่ยอมรับ พวกเขาจะต้องมีการตั้งค่าในสถานีโทร
Moritz

คำตอบ:


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

ฉันมีปัญหาที่คล้ายกันและสิ่งนี้ใช้ได้กับฉันโดยที่ไม่รู้สึกเหมือนแฮ็ค ...

นักเทียบท่า-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: แอพโดยไม่ผ่านตัวเลือกผ่านอาร์เรย์หรือคำพูด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.