Ortam değişkeni neden docker compose ortam dosyasına karıştırılıyor?


10

Bağlam: Docker-compose, Flask uygulamasını çağıran Gunicorn da dahil olmak üzere birkaç kapsayıcı başlatmak için. web/env.gunicornGunicorn başlangıç ​​yapılandırmamı saklamak için bir ortam dosyası kullanıyorum . Bu dosya içeriyor

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

Sorun, GUNICORN_CMD_ARGSboru hattının herhangi bir yerinde doğru bir şekilde işlenmemesidir. Hata çalıştırırken ben almak docker logs gunicornIS

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

Soru, benim kurulumumda varsayımlarımın yanlış olduğu ve böylece ortam değişkeninin karışmasına neden olduğudur. Ortam değişkeni bir terminalde manuel olarak çalıştırıldığında kabul edilir. Docker oluşturma dosyası aşağıdaki gibi görünür

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 kullanmamak, ama dokümanı okumak env değişkeni hakkında nottan çıkış yok. Bir boşlukla denerdim, ama argümanları düzgün bir şekilde ayrıştırmıyor gibi görünüyor ve bu nedenle belki de gunicorn'da bir hata var (bağlama argümanıyla sona ermek için argüman sırasını tersine çevirmek bir çözüm olabilir veya bölünmüş problemi sergileyebilir) İşçiler parametresi)
Tensibai

Parametrelerin sırasını değiştirmeyi denedim, ama bu yardımcı olmadı. Ayrıca Gunicorn ile komut satırından başlatmayı denedim GUNICORN_CMD_ARGSve düzgün kabul etti (işçi ve adres kontrol edildi). Bu yüzden sorunun Docker'ın tarafında olduğunu düşünüyorum.
Moritz

ERROR: build path /home/ben/devopsStackExchange/web either does not exist, is not accessible, or is not a valid URL.. Lütfen bir kişi oluşturun steps to reproduce paragraphve gerekli dosyaları ekleyin, böylece diğer kişiler en azından sorunu yeniden üretmelerine izin vererek size yardımcı olabilir.
030

Lütfen en azından Gunicorn Dockerfile dosyasını ekleyin.
030

Gunicorn Dockerfile kullanmıyorum. command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3Yüklenen değişkenler env_filekabul edilmediğinden sürüme sadık kalacağım . Arama terminalinde önceden ayarlanmış olmaları gerekir.
Moritz

Yanıtlar:


2

Komutlar bölümünü okuduktan ve bu örneği bulduktan sonra , gelenek GUNICORN_CMD_ARGSsadece argümanları doğrudan ileterek atlanabilir gibi görünüyor :

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

Biri gerçekten değişkenleri kullanmak istiyorsa, o zaman aşağıdaki gibi yapılabilir:

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} yalnızca önceden terminalde bulunan değişkenleri değerlendirir, hiçbiri yüklenmez env_file. Herhangi bir sır belirlemediğim için kabul edilebilir bir çözüm
Moritz

3

Benzer bir sorunum vardı ve bu bir hack gibi hissetmeden benim için çalıştı ...

docker-compose.yml :

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

Not: tırnak işaretleri olmadan env GUNICORN_CMD_ARGS öğesini ekleyin

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

Not: CMD gunicorn uygulamasını çalıştırın: dizi veya tırnak yoluyla seçenekleri geçmeden uygulama

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.