将航线添加到MySQL Docker容器

我正在构build一个派生到这个为Docker容器的MySQL(使用它作为一个起点): https : //github.com/docker-library/mysql

我已经修改Dockerfile以在Flyway中添加。 一切都设置为编辑configuration文件连接到本地数据库实例等。意图是从https://github.com/docker-library/mysql/blob/master/5.7/docker-entrypoint.sh调用此命令https://github.com/docker-library/mysql/blob/master/5.7/docker-entrypoint.sh文件(作为入口点运行)在第186行左右:

 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脚本中删除命令,重build并login到容器,并手动运行相同的命令,它没有问题。

我怀疑脚本连接数据库的方式可能有些不同(它有一个内置的SQL“runner”),但我似乎无法追捕它。 在这个过程中,容器会重新启动服务器,这可能与此处有所不同。

由于这个容器是用于开发的,所以一个替代scheme(真正的解决方法)就是使用内置的SQL“runner”来使用这个容器,使用Flyway期望的文件名格式,然后使用Flyway来pipe理生产数据库的版本。

在此先感谢您的帮助。

我的意思是这是从准备好的形象(开始)开始的好方法。

  • 你可以从图像docker“mysql”

     FROM mysql 

    如果您启动完成的图像 – 创build新版本时,docker工人将只更新差异。

  • 接下来,你可以安装java和net-tools

     RUN apt-get -y install apt-utils openjdk-8-jdk net-tools 
  • configurationmysql

     ENV MYSQL_DATABASE=mydb ENV MYSQL_ROOT_PASSWORD=root 
  • 添加飞路

     ADD flyway /opt/flyway 
  • 添加迁移

     ADD sql /opt/flyway/sql 
  • 添加configurationflyway

     ADD config /opt/flyway/conf 
  • 添加脚本开始

     ADD start /root/start.sh 
  • 检查启动MySQL

     RUN netstat -ntlp 
  • 检查Java版本

     RUN java -version 

示例文件:/opt/flyway/conf/flyway.conf

 flyway.driver=com.mysql.jdbc.Driver flyway.url=jdbc:mysql://localhost:3306/mydb flyway.user=root flyway.password=root 

示例文件:start.sh

 #!/bin/bash cd /opt/flyway flyway migrate # may change to start.sh to start product migration or development. 

航道文件

我的意思是说你在下一步可能会使用飞路作为服务:

例如:

 docker run -it -p 3307:3306 my_docker_flyway /root/start << migration_prod.sh docker run -it -p 3308:3306 my_docker_flayway /root/start << migration_dev.sh 

等等