您可以将.env文件用于独立的Dockerfile吗?

我正在处理具有大量环境变量的简单Docker映像。您是否可以像docker-

compose一样导入环境变量文件?我在Docker文件文档中找不到关于此的任何内容。

FROM python:3.6

ENV ENV1 9.3

ENV ENV2 9.3.4

...

ADD . /

RUN pip install -r requirements.txt

CMD [ "python", "./manager.py" ]

我想改写这个问题的一种好方法是:如何有效地在Dockerfile中加载多个环境变量?如果您无法加载文件,则无法将docker文件提交到GitHub。

回答:

是的,您可以通过两种方法来执行此操作。

回答:

在Docker Compose中,您可以在文件本身中提供环境变量,也可以指向外部env文件:

# docker-compose.yml

version: '2'

services:

service-name:

image: service-app

environment:

- GREETING=hello

env_file:

- .env

顺便说一句,一个与之相关的不错的功能是,您可以使用多个Compose文件,随后的每个文件都添加到另一个文件中。因此,如果上面定义了一个基础,则可以执行此操作(例如,针对每个运行时环境):

# docker-compose-dev.yml

version: '2'

services:

service-name:

environment:

- GREETING=goodbye

然后可以运行它:

docker-compose -f docker-compose.yml -f docker-compose-dev.yml up

回答:

仅在Docker中执行此操作,请使用入口点或命令来运行中间脚本,因此:

#Dockerfile

....

ENTRYPOINT ["sh", "bin/start.sh"]

然后在您的启动脚本中:

#!/bin/sh

source .env

python /manager.py

过去,我已将此相关答案用作自己的参考。

回答:

为了进一步说明我的意见,如果将入口点设置为shell或Python脚本,则Unix信号(停止,终止等)很可能不会传递到您的进程中。这是因为该脚本将成为进程ID1,这使其成为容器中所有其他进程的父进程-在Linux /

Unix中,期望此PID将信号转发给其子进程,但是除非您明确实现,它不会发生。

要解决此问题,您可以安装一个初始化系统。我使用Yelp的dumb-init。如果您想更好地了解它,此版本库还具有很多详细信息,或者如果您只是想“安装后忘了”,则提供简单的安装说明。

以上是 您可以将.env文件用于独立的Dockerfile吗? 的全部内容, 来源链接: utcz.com/qa/426356.html

回到顶部