【问题标题】:How do I set a env var and run a gunicorn command in a single docker command?如何设置环境变量并在单个 docker 命令中运行 gunicorn 命令?
【发布时间】:2021-12-25 01:27:38
【问题描述】:

在 docker (1.29) 中运行 gunicorn 命令之前,我很难设置环境变量。我的 docker-compose 文件包含我的 Django/Python 启动,如下所示...

  web:
    restart: always
    build: ./web
    ports:           # to access the container from outside
      - "8000:8000"
    env_file: .env
    environment:
      DEBUG: 'true'
      SERVICE_CREDS_JSON_FILE: '/my-app/credentials.json'
    command: PYTHONPATH=`pwd`/.. 
 /usr/local/bin/gunicorn directory.wsgi:application --reload -w 2 -b :8000

我的 web/Dockerfile 看起来像这样

FROM python:3.9-slim

RUN apt-get update && apt-get install

RUN apt-get install -y dos2unix
RUN apt-get update \
    && apt-get install -y --no-install-recommends gcc g++ libgdal-dev libffi-dev \
    && rm -rf /var/lib/apt/lists/*

RUN python -m pip install --upgrade pip

WORKDIR /my-app/

COPY . /my-app
RUN python -m pip install -r requirements.txt

RUN dos2unix /my-app/entrypoint.sh

ENTRYPOINT ["bash", "/my-app/entrypoint.sh"]

但是,当我跑步时

docker-compose up

我收到此错误

/my-app/entrypoint.sh: line 9: /app/PYTHONPATH=`pwd`/..: No such file or directory
maps_web_1 exited with code 127

如何正确设置环境变量以及运行我的 gunicorn 命令?

【问题讨论】:

  • 我试图给你一个答案,但你能添加你想要的编译运行时进程命令吗?

标签: docker docker-compose environment-variables gunicorn


【解决方案1】:

记住command 被附加到entrypoint,你能添加你期望的最终命令吗? (https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact)

我的猜测是

bash /my-app/entrypoint.sh PYTHONPATH=`pwd`/..

当你试图运行的是:

PYTHONPATH=`pwd` bash /my-app/entrypoint.sh

如果是这样,为什么不在 ENV 中设置 $PYTHONPATH?

FROM python:3.9-slim

RUN apt-get update && apt-get install

RUN apt-get install -y dos2unix
RUN apt-get update \
    && apt-get install -y --no-install-recommends gcc g++ libgdal-dev libffi-dev \
    && rm -rf /var/lib/apt/lists/*

RUN python -m pip install --upgrade pip
ENV WORKDIR="/my-app/"
ENV PYTHONPATH=$WORKDIR
WORKDIR $WORKDIR

COPY . /my-app
RUN python -m pip install -r requirements.txt

RUN dos2unix /my-app/entrypoint.sh

ENTRYPOINT ["bash -c", "./entrypoint.sh"]

然后你可以从你的撰写文件中完全摆脱命令

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 1970-01-01
    • 2018-06-18
    • 2011-04-04
    • 2013-09-25
    • 2018-02-24
    • 1970-01-01
    • 2014-06-04
    • 2013-08-08
    相关资源
    最近更新 更多