我有一个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文件时,一切正常,并且在入口点执行中可用的值)?
为什么未设置默认值?
答案 0 :(得分:0)
以下解决方法似乎可行: 将入口点脚本提取到.sh脚本文件中。
启动容器时,如果未在.env文件中配置环境变量,则环境变量将获得默认值。
新脚本可以直接使用参数,并且值存在。
我不确定为什么会这样,但这可能与docker-compose的每个部分的加载顺序有关。