你可以使用.env文件作为独立的Dockerfile吗?

我正在处理一个简单的Docker镜像,它具有大量的环境variables。 你能够像docker-compose一样导入环境variables文件吗? 在docker文件中我找不到任何关于这个的信息。

Dockerfile

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中加载多个环境variables? 如果你不能加载文件,你将无法将docker文件提交给github。

是的,有几种方法可以做到这一点。

Docker撰写

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

 # docker-compose.yml version: '2' services: service-name: image: service-app environment: - GREETING=hello env_file: - .env 

顺便提一句,有一个很有意思的function是可以使用多个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

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

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

然后在你的开始脚本中:

 #!/bin/sh source .env python /manager.py 

我曾经用这个相关答案作为我自己的一个有用的参考。

有各种select:
https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables–e-env-env-file

 docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash 

(您也可以只引用以前exportedvariables,请参阅下面的USER 。)

回答你关于一个.env文件的问题是:

 cat env.list # This is a comment VAR1=value1 VAR2=value2 USER docker run --env-file env.list ubuntu env | grep VAR VAR1=value1 VAR2=value2 docker run --env-file env.list ubuntu env | grep USER USER=denis 

您也可以从文件加载环境variables。 这个文件应该使用语法variable=value (将variables设置为给定值)或variable从本地环境中获取 ),#用于注释。

关于(image)构build时间或(容器)运行时所需要的variables之间的区别,以及如何将ENVARG结合起来用于dynamic构build参数,你可以试试这个:
ARG或ENV,在这种情况下使用哪一个?

如果您需要环境variables运行时,最简单的方法是创build一个启动脚本,用多个export语句设置环境,然后启动您的过程。

如果您需要他们build立时间,请查看ARGENV声明。 你将需要一个variables。