繁体   English   中英

如何在docker-compose中设置环境变量

[英]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”行上抱怨并显示$VAR1VAR2为空。

将文件重命名为.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM