Чому змінна середовище ввімкнена в докер-композиційному файлі середовища


10

Контекст: docker-compose для запуску декількох контейнерів, включаючи 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 з командного рядка з 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

Будь ласка, додайте принаймні Dockerfile Gunicorn.
030

Я не використовую Dockerfile Gunicorn. Я буду дотримуватися 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. Оскільки я не викладаю жодних секретів, це прийнятне рішення
Моріц

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 без лапок

Докерфайл :

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.