【发布时间】:2017-08-31 20:21:18
【问题描述】:
我正在为 mysql 构建这个 Docker 容器的衍生产品(使用它作为起点):https://github.com/docker-library/mysql
我已修改 Dockerfile 以添加到 Flyway。一切都设置为编辑配置文件以连接到本地数据库实例等。目的是在第 186 行附近的 https://github.com/docker-library/mysql/blob/master/5.7/docker-entrypoint.sh 文件(作为 ENTRYPOINT 运行)内部调用此命令:
flyway migrate
从 shell 脚本内部运行时,连接被拒绝:
Flyway 4.1.2 by Boxfuse
ERROR:
Unable to obtain Jdbc connection from DataSource
(jdbc:mysql://localhost:3306/db-name) for user 'root': Could not connect to address=(host=localhost)(port=3306)(type=master) : Connection refused
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08
Error Code : -1
Message : Could not connect to address=(host=localhost)(port=3306)(type=master) : Connection refused
但是,如果我从 shell 脚本中删除命令,重新构建并登录到容器,然后手动运行相同的命令,它就没有问题了。
我怀疑脚本连接到数据库以执行其操作的方式可能存在一些差异(它有一个内置的 SQL“运行器”),但我似乎无法找到它。容器在这个过程中会重新启动服务器,这可能是这里的不同之处。
由于此容器旨在用于开发,因此一种替代方法(实际上是一种解决方法)是使用此容器的内置 SQL“运行器”,使用 Flyway 期望的文件名格式,然后使用 Flyway 来管理生产DB 的版本。
提前感谢您的帮助。
【问题讨论】: