Docker compose docker compose命令的环境变量

Docker compose docker compose命令的环境变量,docker-compose,Docker Compose,我无法通过compose命令选项将环境变量传递到自定义图像: 我的撰写文件: --- version: '2' services: myservice: image: mycustomimage_lms environment: CONF_HOME: /opt/apps-java/ APP_ENV: dev UUID: me1 command: -Dconfig.home=${CONF_HOME} -Dcomponent.name=LMS -Denv=${A

我无法通过compose命令选项将环境变量传递到自定义图像:

我的撰写文件:

---

version: '2'
services:
myservice:
  image: mycustomimage_lms
  environment:
    CONF_HOME: /opt/apps-java/
    APP_ENV: dev
    UUID: me1
  command: -Dconfig.home=${CONF_HOME} -Dcomponent.name=LMS -Denv=${APP_ENV} -Duser.dir=/tmp/ -DLMS_UUID=${UUID} -jar /opt/apps-java/my.jar
  ports:
    - "9060"
  volumes:
    - ./:/opt/apps-java/
    - ./:/var/logs/apps-logs/
    - ./:/tmp/data
我的映像只是一个自定义jre映像,它的入口点设置为接受jvm参数的shell脚本。从enrtypoint调用的My run.sh

#!/bin/sh
export JAVA_HOME="/usr/java/latest/"
exec $JAVA_HOME/bin/java $@
我需要在运行时将值传递给命令,因为我可以将我的图像用于许多其他JAR,并且只需更改图像的参数

这就是我得到的:

 $> docker-compose up
 WARNING: The CONF_HOME variable is not set. Defaulting to a blank string.
 WARNING: The APP_ENV variable is not set. Defaulting to a blank string.
 WARNING: The UUID variable is not set. Defaulting to a blank string.
我也有 浏览了以下几个答案:


但无法让它工作。请问有什么方向吗

解析文件时,Compose正在读取变量。但是设置
environment
只向容器提供值,而不向文件解析提供值

如果试图将这些变量传递到容器中,则需要在命令中使用额外的
$

-Dconfig.home=$${CONF_HOME} -Dcomponent.name=LMS -Denv=$${APP_ENV} -Duser.dir=/tmp/ -DLMS_UUID=$${UUID
如果您只是尝试在Compose文件中使用变量,则需要将这些变量放入
.env
文件中


有关完整文档的信息,请参见

转义
$
,这样就不会立即替换变量,但稍后在容器环境中,这是一个技巧,正如docker-compose.yml中接受的答案所做的那样

我只是想补充一点,如果您向docker compose调用传递命令,您需要转义shell中的字符,即使用
\

docker-compose run --rm myservice "-Dconfig.home=\${CONF_HOME} -Dcomponent.name=LMS -Denv=\${APP_ENV} -Duser.dir=/tmp/ -DLMS_UUID=\${UUID} -jar /opt/apps-java/my.jar"

明亮的谢谢虽然我使用了.evn,但我希望这些值出现在撰写中,你的建议为我做到了。这对我不起作用。当我使用$${VAR_NAME}时,当该VAR为$VAR_NAME时的值是否表示“额外”。我在您链接的页面上没有看到任何$$文档。可能是docker移动了医生,对我来说也没用。一个literal$变量被传递给命令,它不会在容器中展开。此解决方案不再有效。