如何将具有默认值的环境值传递到docker-compose文件中的入口点

时间:2019-03-11 15:01:30

标签: docker docker-compose

我有一个Docker容器,我想从一个特定的入口点脚本开始。

问题是我的入口点脚本需要一些我想为其设置默认值的环境变量。

    entrypoint:
  - /bin/bash
  - -c
  - |
    set -e
    java -jar liquibase.jar --driver=com.mysql.jdbc.Driver \
    --classpath=mysql-connector-java-5.0.8-bin.jar \
    --url="jdbc:mysql://${DB_HOST}/${DB_NAME}" --username=${DB_USER} --password=${DB_PASSWORD} \
    --logLevel=warning migrate;

我的具体情况是我想连接到数据库,并且大多数情况下db参数以默认值存在(例如:

environment: DB_USER: ${DB_USER:-root} DB_PASSWORD: ${DB_PASSWORD:-123} DB_HOST: ${DB_HOST:-mysql}       DB_NAME:$ {DB_NAME:-myDb} )

当我执行它时,出现以下错误(每个配置一个):

WARNING: The DB_HOST variable is not set. Defaulting to a blank string.

您知道为什么默认值没有传递到容器中吗(添加带有特定参数的.env文件时,一切正常,并且在入口点执行中可用的值)?

为什么未设置默认值?

1 个答案:

答案 0 :(得分:0)

以下解决方法似乎可行: 将入口点脚本提取到.sh脚本文件中。

启动容器时,如果未在.env文件中配置环境变量,则环境变量将获得默认值。

新脚本可以直接使用参数,并且值存在。

我不确定为什么会这样,但这可能与docker-compose的每个部分的加载顺序有关。