【发布时间】:2021-04-29 10:42:18
【问题描述】:
请注意:尽管这个问题提到 MySQL 和 Docker,但实际上两者都没有任何关系,任何知识渊博的 bash 脚本编写者都应该能够回答。
我的 bash 脚本在这里生锈。我正在查看官方的MySQL 8.0 Dockerfile,发现它调用并运行了一个名为docker-entrypoint.sh 的bash 脚本。查看该脚本,它似乎(有条件地)运行snippet of code that creates a database,如果它尚不存在:
if [ "$MYSQL_DATABASE" ]; then
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
mysql+=( "$MYSQL_DATABASE" )
fi
我想知道该脚本期望从哪里填充 MYSQL_DATABASE 变量。如果它期望MYSQL_DATABASE 是一个可选的环境变量,我会期望(从我公认的生疏回忆中)if 条件看起来像:
if [ -z "$MYSQL_DATABASE" ]; then
...
fi
我想 可能 MYSQL_DATABASE 应该是脚本的运行时参数,但我倾向于将其作为一个可行的选项,因为 Dockerfile 没有传递任何脚本调用的参数。
谁能帮助我了解如何使用数据库名称(例如“my_db”)填充MYSQL_DATABASE,以便在此脚本运行时为我创建数据库?
【问题讨论】:
-
if 条件如果是环境变量或脚本中定义的变量有什么区别,我的意思是如果此检查适用于脚本中定义的变量,为什么它不适用于环境变量?
-
谢谢@Shmuel (+1) 但我不明白你想说什么。我在这里问的问题是:如何在运行时/调用时从脚本外部填充
MYSQL_DATABASE? -
@hotmeatballsoup :如果一个变量在使用之前没有在脚本中明确设置,并且应该包含一个值,那么它必须是一个环境变量。当然,作为脚本作者,您也可以决定通过参数列表或参数文件将信息传递给脚本……这取决于您。
标签: bash docker environment-variables dockerfile