docker 容器中的 H2 DB

Posted

技术标签:

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

我在alpine docker 容器中运行一个非常基本的spring boot 应用程序,内存H2 数据库在AWS 上。不幸的是,webAllowOthers 没有设置,所以我无法访问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/h2html 源代码将有一个指向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://***.com/a/49741935/4280315

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

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

【讨论】:

以上是关于docker 容器中的 H2 DB的主要内容,如果未能解决你的问题,请参考以下文章

Docker-compose 与 H2 docker 数据库的 setup.sql 文件

Dockerfile 中的Volume有啥意义,光用docker run

使用Aliyun Docker 容器镜像/注册表服务

R2dbc无法使用tcp与h2数据库一起使用

【容器】关于docker容器中的init进程

docker设置容器中的Ubuntu系统的语言