【问题标题】:Docker-compose not passing environment variables to docker containerDocker-compose 未将环境变量传递给 docker 容器
【发布时间】:2020-02-23 00:19:30
【问题描述】:

我有一个使用环境变量的 Python 应用程序,我想使用一个 Dockerfile 和一个 docker-compose.yml 文件进行 dev\prod 设置(仅使用环境变量更改 env 文件)。

以下是我用来启动应用程序的文件:
Dockerfile

FROM python:3.7-slim-buster
RUN apt-get update

WORKDIR /usr/src/app
RUN mkdir /usr/src/app/excel_users_dump
COPY ./requirements.txt .
RUN pip install -r requirements.txt

COPY . .
RUN python /usr/src/app/myblumbot/main.py

docker-compose.yml

version: '3'
services:
  bot:
    build:
      context: .
    environment:
      ENV: ${ENV}
      PYTHONPATH: ${PYTHONPATH}
      PYTHONBUFFERED: ${PYTHONBUFFERED}
    volumes:
      - states:/var/myblumbot_states

volumes:
  states:

.env(与 docker-compose.yml 在同一目录中)

PYTHONBUFFERED=1  
PYTHONPATH=/usr/src/app  
ENV=DEV

当我跑步时docker-compose up 命令,它构建并告诉我我没有一些环境变量,因此应用程序无法启动。

env = os.environ['ENV'] 

KeyError: 'ENV'

但如果我在 Dockerfile 中添加ENV VAR value,一切都会正常运行。

如何从 docker-compose 和 .env 文件中传递变量?

【问题讨论】:

  • @Mišo 我尝试了该问题的所有答案,但对我来说没有成功:(
  • 请编辑此问题以包含(尤其是)您的docker-compose.yml 的实际文本(不是外部链接)以及您观察到的实际行为。
  • @DavidMaze 我已经编辑了这个问题。谢谢。
  • 您的Dockerfile 没有CMD。 (而且您的docker-compose.yml 文件也没有command:。)您的容器实际运行的进程是什么?您如何验证问题?

标签: docker docker-compose


【解决方案1】:

尝试关注docs

Compose 支持在 名为 .env 的环境文件放置在 docker-compose 命令被执行(当前工作目录)

尝试使用ENTRYPOINT python /usr/src/app/myblumbot/main.py 而不是RUN...

【讨论】:

  • 我的 .env 文件和 docker-compose.yml 文件放在同一个目录。我做错了什么?
  • ENTRYPOINT python /usr/src/app/myblumbot/main.py 帮了我,谢谢!
【解决方案2】:

当您像您展示的那样使用Dockerfiledocker-compose.yml 文件进行设置时,事情会分两个阶段进行。在第一阶段构建映像,在第二阶段实际运行容器。 docker-compose.yml 中的大部分设置在构建阶段都不起作用;其中包括网络设置、环境变量和已发布的端口。

在您的Dockerfile 中,您正在RUN 步骤中运行您的应用程序。这是构建的一部分,而不是执行阶段;最终生成的图像是应用程序退出后生成的文件系统。由于处于构建阶段,环境变量设置不生效。

如果你把RUN改成CMD,那么这会记录在镜像中,构建完成后,它将作为主容器进程运行,并带有环境变量和其他设置。

(在 cmets 中,您建议使用 ENTRYPOINT。出于同样的原因,这也可以,但它会使调试 shell 等一些任务变得更加困难,并且有一个标准的 Docker 首次设置模式需要 @987654329 @ 为自己的目的。我更喜欢 CMD 在这里。)

【讨论】:

  • 感谢您的解释!我会跟进的。
猜你喜欢
  • 2017-09-18
  • 2020-11-07
  • 1970-01-01
  • 2015-09-18
  • 2022-01-16
  • 2021-06-07
  • 2021-11-27
  • 2018-08-23
相关资源
最近更新 更多