mysql - 将环境变量传递给 Docker 时,Flyway 迁移失败
问题描述
使用flyway
. 使用 dockerized 版本并使用conf
文件进行迁移配置。
下面是我的配置文件
flyway.url = jdbc:mysql://${MYSQLHOST}:3306/myschema
flyway.user = myusername
flyway.password = mypassword
flyway.schemas = myschema
flyway.cleanDisabled = true
正在运行以下命令来执行迁移
sudo docker run -e "MYSQLHOST=myhostip" --rm -it -v `pwd`/path/to/confi/:/flyway/conf/ -v `pwd`/path/to/migrations:/flyway/sql boxfuse/flyway:5.1.4 -configFiles=/flyway/conf/flyway.conf migrate
我收到以下错误
ERROR:
Unable to obtain connection from database (jdbc:mysql://${MYSQLHOST}:3306/myschema) for user 'myuser': Could not connect to address=(host=${MYSQLHOST})(port=3306)(type=master) : ${MYSQLHOST}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08
Error Code : -1
Message : Could not connect to address=(host=${MYSQLHOST})(port=3306)(type=master) : ${MYSQLHOST}
如果我使用主机 ip 详细信息更改配置文件,则迁移成功且没有任何错误。我做错了什么?
解决方案
Flyway 允许您通过一组特定的环境变量传入配置参数;它不会在配置文件中执行完整的变量替换。请参阅https://flywaydb.org/documentation/envvars。
你可以做的是删除配置文件的第一行,然后
sudo docker run -e "FLYWAY_URL=jdbc:mysql://myhostip:3306/myschema" ...
推荐阅读
- c# - 将 xml 属性读取为对象
- reactjs - ReactJS:处理无效的动态链接并呈现 404 错误消息
- python - xarray 中是否有一个函数可以帮助比较两个变量随时间变化,并解释缺失值?
- oracle - 在没有前向声明的情况下为另一个过程中的私有过程提供范围
- c# - 如何将一个应用程序的 UI 集成到另一个应用程序中?
- r - 保持每组观察次数最少的行
- reactjs - React Hook:仅当用户停止输入时才向服务器发送数据
- java - 在 switch 函数中如何在每个 case 块中获取 case 值
- php - 从 WooCommerce 中的父变量产品设置订单项目永久链接
- node.js - 中断后返回瀑布对话框