你可以使用.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
(您也可以只引用以前exported
variables,请参阅下面的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之间的区别,以及如何将ENV
和ARG
结合起来用于dynamic构build参数,你可以试试这个:
ARG或ENV,在这种情况下使用哪一个?
如果您需要环境variables运行时,最简单的方法是创build一个启动脚本,用多个export
语句设置环境,然后启动您的过程。
如果您需要他们build立时间,请查看ARG
和ENV
声明。 你将需要一个variables。