2016-11-06 103 views
3
我有在通过撰写命令选项传递环境变量,以我的自定义图像的烦恼

搬运工组成的环境变量命令

我撰写文件:

 --- 

     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脚本。我run.sh是从enrtypoint

  #!/bin/sh 
      export JAVA_HOME="/usr/java/latest/" 
      exec $JAVA_HOME/bin/java [email protected] 

我需要传递值在运行命令,因为我就可以使用我的形象了很多其他的罐子,只是改变参数,以我的形象叫。

这就是我得到:

  $> 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. 

我也经历了几个答案,如 :

Docker Compose - Command using Container Environment Variable

Docker-compose environment variables

而是合作它没有得到它的工作。有任何方向吗?

回答

4

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

如果你想这些变量传递到容器中,您需要使用extar $

-Dconfig.home=$${CONF_HOME} -Dcomponent.name=LMS -Denv=$${APP_ENV} -Duser.dir=/tmp/ -DLMS_UUID=$${UUID 

如果你只是想在撰写文件中使用变量来逃避他们的命令,您需要将这些变量放入一个.env文件中。

查看https://docs.docker.com/compose/environment-variables/查看完整文档

+0

辉煌。谢谢。尽管我使用了.evn,但我希望这些价值观能够在撰写中,而你的建议对我来说也是如此。 –