一千萬個為什麽

搜索

為什麽Docker中的環境變量被破壞組成環境文件



上下文:docker-compose啟動多個容器,包括調用Flask應用程序的Gunicorn。我正在使用環境文件 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.

問題是,在我的設置中,我的假設錯了,從而導致環境變量被破壞?在終端中手動運行時接受環境變量。 Docker撰寫文件如下所示

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:

轉載註明原文: 為什麽Docker中的環境變量被破壞組成環境文件

一共有 2 個回答:

我有一個類似的問題,這對我來說沒有它感覺像一個黑客...

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

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 app:app而不通過數組或引號傳遞選項

閱讀命令章節並找到這個例子,看起來像自定義的 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