【问题标题】:H2 DB in docker containerdocker 容器中的 H2 DB
【发布时间】:2019-02-26 15:31:36
【问题描述】:

我在alpine docker 容器中运行一个非常基本的spring boot 应用程序,内存H2 数据库在AWS 上。不幸的是,webAllowOthers 没有设置,所以我无法访问H2 控制台。

有什么方法可以访问数据库中的数据吗?

我可以进入容器,但我不知道如何继续。

【问题讨论】:

    标签: spring-boot docker h2


    【解决方案1】:

    好的,我设法解决了,以防将来有人需要它:

    H2 控制台有一个工具可以将任何 DB 备份到 .sql 文件(可在 TOOLS 菜单中访问),但由于内存中的 DB 仅存在于正在运行的进程中,因此无法使用 H2 Shell 访问它,只能通过嵌入在 Spring Boot 应用程序中的控制台。

    H2 控制台使用了大量的 javascript,因此在纯命令行环境中几乎不可能在命令行浏览器中使用它(感觉就像第一次使用 VI...),但检查如何一个本地运行的、可访问的控制台工作,给出了答案:

    脚本工具使用以下请求参数格式(根据您的配置进行更改):

    tool: Script
    args: -url,jdbc:h2:mem:testdb,-user,sa,-script,~/backup.sql
    

    所以要备份数据库:

    • sh 进入容器
    • wget http://localhost:8080/h2。 HTML 源代码将有一个指向login.jsp?jsessionid=xxxxx 的链接。在 curl 命令中使用此会话 ID。
    • 将所需数据以 URL 编码格式发布到Script 工具:
    curl -d "tool=Script&args=-url%2Cjdbc%3Ah2%3Amem%3Atestdb%2C-user%2Csa%2C-script%2C%7E%2backup.sql" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost:8080/h2/tools.do?jsessionid=xxxx
    

    如果你做的一切都正确,备份 SQL 应该在给定的位置。

    【讨论】:

      【解决方案2】:

      这个答案:

      https://stackoverflow.com/a/49741935/4280315

      ...对于问题“无法查看 h2 数据库 Web 控制台以及如何更改默认 h2 端口”,可能会有所帮助。

      它适用于我在远程服务器中的 spring-boot 应用程序。不过,我不使用 Docker

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 2015-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        相关资源
        最近更新 更多