Tại sao biến môi trường được xử lý trong docker soạn tập tin môi trường


10

Bối cảnh: docker-compose để bắt đầu một số container, bao gồm Gunicorn gọi ứng dụng Flask. Tôi đang sử dụng tệp môi trường web/env.gunicornđể lưu trữ cấu hình khởi động Gunicorn của mình. Tập tin này chứa

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

Vấn đề là GUNICORN_CMD_ARGSkhông được xử lý chính xác ở đâu đó trong đường ống. Lỗi mà tôi gặp phải khi chạy docker logs gunicorn

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

Câu hỏi là, ở đâu trong thiết lập của tôi, các giả định của tôi sai, do đó làm cho biến môi trường bị sai lệch? Biến môi trường được chấp nhận khi chạy thủ công trong thiết bị đầu cuối. Các tập tin soạn thảo docker trông như sau

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:

Không sử dụng gunicorn, nhưng đọc tài liệu không có = đăng xuất khỏi ghi chú về biến env. Tôi đã thử với một khoảng trắng, nhưng có vẻ như nó không phân tích đúng các đối số và như vậy có thể là một lỗi trong gunicorn (đảo ngược thứ tự đối số để kết thúc bằng đối số ràng buộc có thể là một cách giải quyết hoặc thể hiện vấn đề phân tách với tham số công nhân)
Tensibai

Tôi đã thử thay đổi thứ tự của các tham số, nhưng điều đó không giúp được gì. Tôi cũng đã thử bắt đầu Gunicorn từ dòng lệnh với GUNICORN_CMD_ARGSset và nó đã chấp nhận nó một cách chính xác (# công nhân và địa chỉ được kiểm tra). Đó là lý do tại sao tôi cho rằng vấn đề nằm ở phía Docker.
Moritz

ERROR: build path /home/ben/devopsStackExchange/web either does not exist, is not accessible, or is not a valid URL.. Vui lòng tạo steps to reproduce paragraphvà thêm các tệp cần thiết để người khác có thể giúp bạn bằng cách ít nhất cho phép họ tái tạo vấn đề.
030

Vui lòng thêm ít nhất Dockerfile Gunicorn.
030

Tôi không sử dụng Dockerfile Gunicorn. Tôi sẽ giữ nguyên command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3phiên bản, vì các biến được tải qua env_filekhông được chấp nhận. Chúng phải được đặt trong thiết bị đầu cuối cuộc gọi.
Moritz

Câu trả lời:


2

Sau khi đọc chương lệnh và tìm mẫu này , có vẻ như tùy chỉnh GUNICORN_CMD_ARGScó thể được bỏ qua bằng cách chuyển trực tiếp các đối số:

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

Nếu một người thực sự muốn sử dụng các biến thì có thể được thực hiện như sau:

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} sẽ chỉ đánh giá các biến đã có trong thiết bị đầu cuối, không có biến nào được tải qua env_file. Vì tôi không đặt bất kỳ bí mật nào, đó là một giải pháp chấp nhận được
Moritz

3

Tôi đã có một vấn đề tương tự và điều này làm việc cho tôi mà không cảm thấy như là một hack ...

docker-compose.yml :

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

Lưu ý: thêm env GUNICORN_CMD_ARGS mà không có dấu ngoặc kép

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

Lưu ý: chạy ứng dụng CMD gunicorn: ứng dụng mà không chuyển các tùy chọn qua mảng hoặc dấu ngoặc kép

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.