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/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://***.com/a/49741935/4280315
...对于问题“无法查看 h2 数据库 Web 控制台以及如何更改默认 h2 端口”,可能会有所帮助。
它适用于我在远程服务器中的 spring-boot 应用程序。不过,我不使用 Docker。
【讨论】:
以上是关于docker 容器中的 H2 DB的主要内容,如果未能解决你的问题,请参考以下文章
Docker-compose 与 H2 docker 数据库的 setup.sql 文件