当前位置: 首页 > 知识库问答 >
问题:

无法在docker容器中运行数据库为Mysql的spring boot应用程序的flyway脚本

齐昊
2023-03-14

我有一个spring boot应用程序,它有很多flyway脚本。此脚本将在启动应用程序启动后自动运行。他们在没有Docker的情况下运行正常。当我把这个应用程序放到docker容器application.yml中时

server:
  port:8080
  context-path:/tms-server

http:
  mappers:
     jsonPrettyPrint:true
security:
  basic:
     enabled:false
  cors:
     enabled:true

flyway:
   enabled:true
  clean-on-validation-error:false
   validate-on-migrate:false
   url:jdbc:mysql://mysql-docker-container:3306/synfioo_poc?useSSL=false
   user:app_user
  password:test123
  schemas:synfioo_poc
  locations:db/migration/mysql
spring:
   profiles:
     active:mysql

flyway Sql文件位于类路径:db/migration/mysql

db/migration/mysql/v0001__r001_create_schema.sql:

CREATE TABLE synfioo_poc.Binary_Object (
  id BIGINT NOT NULL AUTO_INCREMENT,
  modification_counter INTEGER NOT NULL,
  data BLOB(2147483647),
  size BIGINT NOT NULL,
  mime_Type VARCHAR(255),
  PRIMARY KEY (ID)
)

我的应用程序-mysql.yml看起来像

spring:
  jpa:
     database:mysql
     database-platform:org.hibernate.dialect.MySQL5Dialect
  datasource:
      url:jdbc:mysql://mysql-docker-container:3306/synfioo_poc?useSSL=false
      username:app_user
      password:test123
      driver-class-name:com.mysql.jdbc.Driver

在docker构建之后,我将我的spring boot与Mysql Db链接如下
假设我已经正确地创建了Mysql映像,并且它能够运行,从Mysql客户端创建表,但是flyway脚本没有从Java程序运行,也正确地创建了docker文件

docker run -t --name synfioo-poc-container --link  mysql-docker-container:mysql -p 8080:8080  docker-synfioo-core:latest

例外情况:

2018-05-31 13:28:45.746  INFO 1 --- [           main] o.f.core.internal.util.VersionPrinter    : Flyway 3.2.1 by Boxfuse
2018-05-31 13:28:46.783  INFO 1 --- [           main] o.f.c.i.dbsupport.DbSupportFactory       : Database: jdbc:h2:mem:testdb (H2 1.4)
2018-05-31 13:28:47.457  INFO 1 --- [           main] o.f.core.internal.command.DbValidate     : Validated 18 migrations (execution time 00:00.506s)
2018-05-31 13:28:47.502  INFO 1 --- [           main] o.f.c.i.metadatatable.MetaDataTableImpl  : Creating Metadata table: "PUBLIC"."schema_version"
2018-05-31 13:28:47.609  INFO 1 --- [           main] o.f.core.internal.command.DbMigrate      : Current version of schema "PUBLIC": << Empty Schema >>
2018-05-31 13:28:47.615  INFO 1 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 0001 - R001 Create schema
2018-05-31 13:28:47.638 ERROR 1 --- [           main] o.f.core.internal.command.DbMigrate      : Migration of schema "PUBLIC" to version 0001 failed! Please restore back
ups and roll back database and code!
2018-05-31 13:28:47.670  WARN 1 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh
 attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'beansBatchConfig': Unsatisfied dependency expressed through me
thod 'setTransactionManager' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager'
 defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Initialization of bean failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoc
onfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V0001__R001_Create_schema.sql failed
----------------------------------------------
SQL State  : 90079
Error Code : 90079
Message    : Schema "SYNFIOO_POC" not found; SQL statement:
CREATE TABLE synfioo_poc.Binary_Object (
  id BIGINT NOT NULL AUTO_INCREMENT,
  modification_counter INTEGER NOT NULL,
  data BLOB(2147483647),
  size BIGINT NOT NULL,
  mime_Type VARCHAR(255),
  PRIMARY KEY (ID)
) [90079-193]
Location   : db/migration/mysql/V0001__R001_Create_schema.sql (/file:/synfioo-core-0.0.1-SNAPSHOT.jar!/db/migration/mysql/V0001__R001_Create_schema.sq
Line       : 8
Statement  : CREATE TABLE synfioo_poc.Binary_Object (
  id BIGINT NOT NULL AUTO_INCREMENT,
  modification_counter INTEGER NOT NULL,
  data BLOB(2147483647),
  size BIGINT NOT NULL,
  mime_Type VARCHAR(255),
  PRIMARY KEY (ID)
)

有人能在这个问题上帮忙吗。

共有1个答案

梅庆
2023-03-14
Message    : Schema "SYNFIOO_POC" not found; SQL statement:
CREATE TABLE synfioo_poc.Binary_Object (
...

v0001__r001_create_schema.sql中引用的synfio_poc架构/数据库似乎不存在于mysql-docker-container实例中。

尝试将createdatabaseifNotexist=true添加到mysql的jdbc url以自动创建它,如果需要:

url:jdbc:mysql://mysql-docker-container:3306/synfioo_poc?useSSL=false&createDatabaseIfNotExist=true
 类似资料:
  • 我有一个react-app,它简单地显示hello-world消息,但我喜欢运行应用程序通过docker-container,但有这个问题。在此消息之后,进程停止,没有运行应用程序。 我不能理解我应该做什么,因为我有一个很小的应用程序,在Dockerfile中有基本代码 我需要安装webpack-dev-server吗,我尝试了,但得到了版本错误,如“手动添加服务器”的版本比已经安装的服务器低。所

  • 问题内容: 我在让我的MySQL容器运行来自Docker Compose的一些初始化脚本(创建一些数据库)时遇到问题。根据Docker Hub上的文档,我将文件挂载在其中,但无济于事。 我的撰写文件如下: 的内容只有1个文件: 一旦启动,MySQL正在运行,但未创建数据库。服务容器还成功链接到MySQL容器。扑向MySQL容器;初始化脚本已成功安装在正确的位置。 有人可以在这里看到一些明显的问题吗

  • 在我的项目中,当我运行后端时,使用Quarkus、Angular和PostgreSQL DB 这是我放在后端文件夹(Quarkus)中的“docker-compose.yml”文件: 但是当我构建一个Quarkus泊坞窗映像并尝试在泊坞窗容器中运行它时,它失败了!知道角度泊坞站容器运行良好,数据库也是如此。以下是我在运行容器后获得的错误日志: 使用 /opt/jboss/容器/java/运行/运行

  • 问题内容: 我创建了一个Dockerfile在Docker内部运行Docker: 启动容器并运行docker ps后,我得到:“无法通过unix:///var/run/docker.sock连接到Docker守护程序。Docker守护程序正在运行吗?” 我在容器内执行了命令dockerd: 错误启动守护程序:错误初始化网络控制器:错误获取控制器实例:无法创建NAT链DOCKER:iptables失

  • 我是新来的docker和有一个简单的DW(dropwizard)应用程序连接到elasticsearch,其中已经运行在docker使用docker-compose.yml,其中有以下内容。 弹性搜索的Docker-compose.yml 注意:我将8200和8300公开为主机(本地mac系统)上的ES端口 现在,当我在本地主机上运行连接到8200中ES的DW应用程序时,一切都正常了,但现在我正在

  • 其基本思想是运行带有音频和ui的应用程序(vlc、firefox、skype…) 我在使用pulseaudio搜索docker容器,但我找到的所有容器都在TCP上使用pulseaudio流。(应用程序的安全沙箱) https://gist.github.com/hybris42/ce429de428e5af3a344a https://github.com/jlund/docker-chrome-