Почему Переменная Среды Искажена В Файле Среды Создания Docker

  • Автор темы Experiment
  • Обновлено
  • 22, Oct 2024
  • #1

Контекст: docker-compose для запуска нескольких контейнеров, включая Gunicorn, который вызывает приложение Flask. Я использую файл среды

 
 
 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:
 
to store my Gunicorn startup configuration. This file contains

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

Проблема в том, что docker logs gunicorn is not processed correctly somewhere in the pipeline. The error that I get when running GUNICORN_CMD_ARGS является

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

Вопрос в том, где в моей настройке мои предположения неверны, что приводит к искажению переменной среды? Переменная среды принимается при запуске вручную в терминале. Файл компоновки докера выглядит следующим образом

web/env.gunicorn

#docker #docker-compose

Experiment


Рег
05 May, 2014

Тем
67

Постов
190

Баллов
545
  • 25, Oct 2024
  • #2

После прочтения глава команд и найти этот образец, похоже, что это обычай

 
 
 
 
 GUNICORN_CMD_ARGS=--bind=127.0.0.1:8001 --workers=3 
could be omitted by just passing the arguments directly:

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

Если кто-то действительно хочет использовать переменные, то это можно сделать следующим образом:

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

.env

GUNICORN_BIND_ADDRESS=127.0.0.1:8001 GUNICORN_WORKERS=3 ||answer||

У меня была аналогичная проблема, и это сработало для меня, не ощущая взлома...

docker-compose.yml:

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

Примечание: добавьте env GUNICORN_CMD_ARGS без кавычек.

Докерфайл:

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

Примечание. Запустите приложение CMD Gunicorn: приложение без передачи параметров через массив или кавычки.

 

Nasty.na2010


Рег
26 Nov, 2019

Тем
82

Постов
208

Баллов
648
  • 25, Oct 2024
  • #3

Я столкнулся с этой проблемой с файлом среды с помощью docker-compose и обнаружил, что проблема связана с кавычками.

Если я поставлю GUNICORN_CMD_ARGS on the .env file the parameters are accepted without any issue, but if I put quotes around them the variable gets mangled by docker-compose.

 

Xitja


Рег
23 Jan, 2007

Тем
75

Постов
194

Баллов
599
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно