我通过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
Run Code Online (Sandbox Code Playgroud)
我的图像只是一个自定义的jre图像,其入口点设置为接受jvm参数的shell脚本.我从enrtypoint调用的run.sh
#!/bin/sh
export JAVA_HOME="/usr/java/latest/"
exec $JAVA_HOME/bin/java $@
Run Code Online (Sandbox Code Playgroud)
我需要在运行时将值传递给命令,因为我可以将我的图像用于许多其他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.
Run Code Online (Sandbox Code Playgroud)
我也经历了几个答案,例如:
和
但无法让它发挥作用.有什么方向吗?
dne*_*hin 21
解析文件时,Compose正在读取变量.但是设置environment
只为容器提供值,而不是文件解析.
如果您尝试将这些变量传递到容器中,则需要使用额外的命令在命令中对它们进行转义 $
-Dconfig.home=$${CONF_HOME} -Dcomponent.name=LMS -Denv=$${APP_ENV} -Duser.dir=/tmp/ -DLMS_UUID=$${UUID
Run Code Online (Sandbox Code Playgroud)
如果您只是尝试在Compose文件中使用变量,则需要将这些变量放入.env
文件中.
有关完整文档,请参阅https://docs.docker.com/compose/compose-file/#variable-substitution
这是特定于语法的,尽管其他答案中有说明,但我无法正确运行它,直到通过以下试验和错误发现:
\nversion: "3.9"\nservices:\n test-vars-service:\n image: alpine\n environment:\n VAR_ONE: "Hello"\n VAR_TWO: "World"\n command: sh -c 'echo "$$VAR_ONE $$VAR_TWO"'\n
Run Code Online (Sandbox Code Playgroud)\n这导致:
\n[+] Running 1/0\n \xe2\x9c\x94 Container var-test-test-vars-service-1 Created 0.0s \nAttaching to var-test-test-vars-service-1\nvar-test-test-vars-service-1 | Hello World\nvar-test-test-vars-service-1 exited with code 0\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
10291 次 |
最近记录: |