组合环境中的Docker变量扩展

问题描述 投票:1回答:1

我发现如果我在docker-compose服务条目中定义一个环境变量,它将不会在环境部分中定义的其他变量中展开,但如果变量是在env文件中定义的,它将被扩展,例如,

  someserver:
    image: "some-server:latest"
    restart: always
    ports:
      - "8849:8849"
    environment:
       javaMemoryLimit: 3056M
       JAVA_OPTS: "-Xmx${javaMemoryLimit} -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8849 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.rmi.port=8849 -Djava.rmi.server.hostname=localhost"

当我用这个做docker-compose up时,我得到关于变量未设置的警告:

WARNING: The javaMemoryLimit variable is not set. Defaulting to a blank string.

如果我使用环境定义的列表形式,也会出现同样的情况。

但是如果变量javaMemoryLimit是在.env中定义的那么扩展就可以了。我也尝试过使用$$javaMemoryLimit然后我没有得到警告信息但是当容器实际启动时变量没有被扩展。有任何想法吗?

docker docker-compose
1个回答
0
投票

这是故意的变量替换行为。在.env级别仅评估来自shell环境的docker-compose.yaml和变量。否则,${javaMemoryLimit}将扩展为空字符串。

作为旁注:更令人讨厌的是,在env_file:指定的文件中无变量替换。

那就是说,如果你做"-Xmx$${javaMemoryLimit} -D...任何扩展JAVA_OPTS可能工作,因为那应该扩展到你的-Xmx${javaMemoryLimit} -D... -Xmx -D...(而不是ENTRYPOINT)。

© www.soinside.com 2019 - 2024. All rights reserved.