![](/img/trans.png)
[英]How to set default environment variables for docker-compose services?
[英]How to set environment variables in docker-compose
我有一个env_file
-compose文件,在其中我使用env_file
在运行时读取和设置一堆env变量。 这些env变量是我需要在运行时使用command
运行的命令所必需的。 但是,似乎在运行时设置env变量之前已执行了command
部分,这会导致错误。 如何确保在docker-compose中执行command
部分之前设置环境变量?
这是我的docker-compose文件
services:
mlx-python-hdfs:
image: image_name
container_name: cname
env_file: ./variables.txt
command:
- microservice $VAR1 $VAR2
$VAR1
和$VAR2
是从variables.txt文件中读取的,但是当我启动容器时,它在“微服务$ VAR1 $ VAR2”行上抱怨并显示$VAR1
和VAR2
为空。
将文件重命名为.env
(无名称),以便mv variables.txt .env
编辑您的compose
:
services:
mlx-python-hdfs:
image: image_name
container_name: cname
command:
- microservice $VAR1 $VAR2
然后正常运行它看到这个
Docker Compose command:
指令具有两种形式。 如果将其指定为列表,则将其作为显式各个参数的列表进行读取; 没有外壳程序被调用,也没有参数扩展。
command:
- /bin/ls
- -l
- /app
如果将其指定为简单字符串,则将其隐式包装在sh -c '...'
,并且该shell将进行变量扩展,这是您所需要的。
command: microservice $VAR1 $VAR2
(您的表单不仅不进行变量扩展,而且因为您在单个列表项中指定了该命令,因此它正在寻找一个字面名为microservice $VAR1 $VAR2
的文件(包括空格和美元符号)作为主要容器进程。 )
环境变量很可能是在容器内设置的。 但是,组合文件解析器会扩展$
语法,以从主机上的Shell注入设置。 要在容器内扩展它们,您需要使用$$
语法对其进行转义:
services:
mlx-python-hdfs:
image: image_name
container_name: cname
env_file: ./variables.txt
command:
- microservice $$VAR1 $$VAR2
这将把文字$
传递到容器中,并由容器内的外壳扩展。
有关更多详细信息,请参见撰写文件文档: https : //docs.docker.com/compose/compose-file/#variable-substitution
请注意,将文件重命名为.env
导致变量在.env
-compose内部而不是在容器内部设置。 如果您不对变量进行转义,那也将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.