Docker compose docker compose命令的环境变量
我无法通过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
---
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$变量被传递给命令,它不会在容器中展开。此解决方案不再有效。