首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合入口点中的Docker变量扩展

组合入口点中的Docker变量扩展
EN

Stack Overflow用户
提问于 2018-01-10 17:58:29
回答 1查看 5K关注 0票数 3

我发现,如果我在docker-compose服务条目中覆盖图像的入口点,它会忽略环境部分中定义的变量,但会从环境文件中读取它们,例如

代码语言:javascript
复制
  someserver:
    image: "some-server:latest"
    restart: always
    ports:
      - "8849:8849"
    environment:
       javaMemoryLimit: 3056M
       JAVA_OPTS: "-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"
    entrypoint: java ${JAVA_OPTS} -Xmx${javaMemoryLimit} -jar /app.jar

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

代码语言:javascript
复制
WARNING: The JAVA_OPTS variable is not set. Defaulting to a blank string.
WARNING: The javaMemoryLimit variable is not set. Defaulting to a blank string.

但是当我在环境文件中定义变量时,例如.env

代码语言:javascript
复制
javaMemoryLimit=2098M
JAVA_OPTS=-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

然后,变量会按预期展开。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-10 22:45:57

在compose environment部分中定义的变量被传递给容器,但docker-compose本身并不使用它来解析您的yml文件。yml文件中的变量根据主机外壳的环境(从中运行docker-compose up命令的外壳)和/或.env文件内容展开。

由于您正在使用外壳语法运行入口点,因此您可以通过转义变量,让容器内的外壳展开变量,而不是让docker-compose展开变量:

代码语言:javascript
复制
entrypoint: "java $${JAVA_OPTS} -Xmx$${javaMemoryLimit} -jar /app.jar"

您可能需要添加/bin/sh来解析这些变量:

代码语言:javascript
复制
entrypoint: "/bin/sh -c \"java $${JAVA_OPTS} -Xmx$${javaMemoryLimit} -jar /app.jar\""
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48184700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档