news 2026/6/10 3:08:26

Dm达梦数据库使用mycat 报错之:java.lang.llegalArgumentException: Invalid DataSource:0

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dm达梦数据库使用mycat 报错之:java.lang.llegalArgumentException: Invalid DataSource:0

在之前的文章中:OpenEuler docker安装Mycat连接达梦DM数据库-CSDN博客

我已经安装并启动了mycat ,而且连接也是没有问题的,但是后来我在用 navicat 进入其中的时候报错了

java.lang.llegalArgumentException: Invalid DataSource:0

然后我就开始检查

一、驱动没有传进去

在根据我OpenEuler docker安装Mycat连接达梦DM数据库-CSDN博客中的方法一一排查之后,我发现我的文件配置都没有问题的,为啥还是连不进去看表,然后我就进docker容器中一看。

很好,根本没有我传入到 lib 的Dmjdbcdriver8.jar 这个文件

原因:我是通过Dockerfile构建镜像并启动 Mycat 的,这就需要明确一个核心点:Dockerfile的作用是「构建镜像」,而「目录挂载(让宿主机文件同步到容器内)」是「启动容器」时的运行时配置,无法直接在Dockerfile中完成动态挂载Dockerfile中的COPY/ADD是将文件复制到镜像中,属于静态打包,不是动态挂载)。

所以哪怕我上传文件之后,再重新启动docker容器也是没有用的,对应的lib包已经挂载进去了。

这个时候我想直接在 Docker 操作中传入驱动和配置文件,不修改Dockerfile重新构建镜像,而这有两种常用且高效的方式,分别对应「临时传入(测试用)」和「永久传入(长期使用)」

方式一:容器启动后,用docker cp直接传入(临时传入,测试优先)

这是最直接的方式,无需复杂配置,启动容器后,直接把宿主机的 DM 驱动、schema.xml复制到容器内对应的目录,适合快速测试验证。

完整操作步骤:
  1. 先按原有Dockerfile启动容器(无需修改,先启动起来)

    # 1. 构建原有镜像(如果没构建过) docker build -t mycat-original:v1.0 . # 2. 启动容器(注释掉VOLUME不影响启动,只是没有数据卷解耦) docker run -d --name mycat-temp -p 8066:8066 mycat-original:v1.0
  2. docker cp传入 DM 驱动(宿主机→容器内)

    # 格式:docker cp 宿主机文件路径 容器名/ID:容器内目标路径 # 示例:把宿主机的DmJdbcDriver18.jar传入容器的/usr/local/mycat/lib目录 docker cp /usr/local/docker/mycat/mycat/lib/DmJdbcDriver18.jar mycat-temp:/usr/local/mycat/lib/
  3. docker cp传入修正后的schema.xml(宿主机→容器内)

    # 示例:把宿主机的schema.xml传入容器的/usr/local/mycat/conf目录 docker cp /usr/local/docker/mycat/mycat/conf/schema.xml mycat-temp:/usr/local/mycat/conf/
  4. 进入容器,修改文件权限(确保 JVM 可读取)

    # 进入容器 docker exec -it mycat-temp /bin/bash # 修改驱动和配置文件权限 chmod 644 /usr/local/mycat/lib/DmJdbcDriver18.jar chmod 644 /usr/local/mycat/conf/schema.xml
  5. 重启容器内的 Mycat,使传入的文件生效

    # 容器内重启Mycat /usr/local/mycat/bin/mycat restart
优缺点:
  • ✅ 优点:操作简单、快速,无需修改Dockerfile,适合临时测试、验证配置;
  • ❌ 缺点:容器删除后,传入的文件会丢失(仅存在于当前容器内),下次启动新容器需要重新cp,不适合长期使用。

方式二:容器启动时,用-v挂载传入(永久传入,长期使用)

这是更推荐的长期使用方式,启动容器时通过-v参数,将宿主机的lib(驱动)、conf(配置)目录直接挂载到容器内对应目录,宿主机的文件会动态同步到容器内,修改宿主机文件无需重新传入,重启容器即可生效。

完整操作步骤:
  1. 宿主机准备好文件目录(提前放好驱动和配置)确保宿主机的/usr/local/docker/mycat/mycat目录下有对应的文件:

    /usr/local/docker/mycat/mycat/ ├── lib/ │ └── DmJdbcDriver18.jar (DM驱动,标准命名) └── conf/ └── schema.xml (修正后的DM配置)
  2. 启动容器时,添加-v参数挂载目录(核心)无需修改原有镜像,启动时直接挂载,文件会自动同步到容器内:

    docker run -d \ --name mycat-permanent \ -p 8066:8066 \ -p 9066:9066 \ # 挂载宿主机lib目录→容器内Mycat lib目录(驱动同步) -v /usr/local/docker/mycat/mycat/lib:/usr/local/mycat/lib \ # 挂载宿主机conf目录→容器内Mycat conf目录(配置同步) -v /usr/local/docker/mycat/mycat/conf:/usr/local/mycat/conf \ # 可选:挂载logs目录,方便查看日志 -v /usr/local/docker/mycat/mycat/logs:/usr/local/mycat/logs \ --privileged=true \ mycat-original:v1.0 (你的原有镜像名)
  3. 验证容器内是否已同步到文件

    # 进入容器 docker exec -it mycat-permanent /bin/bash # 查看驱动是否存在 ls -l /usr/local/mycat/lib | grep DmJdbcDriver18.jar # 查看配置是否存在 cat /usr/local/mycat/conf/schema.xml
优缺点:
  • ✅ 优点:文件永久同步,宿主机修改驱动 / 配置后,重启容器即可生效;容器删除后,宿主机文件仍保留,下次启动新容器直接挂载即可,适合长期使用;
  • ❌ 缺点:需要提前整理宿主机目录结构,首次配置稍繁琐(一次配置,终身受益)。

关键补充:两种方式的核心注意点

  1. 传入的 DM 驱动必须命名为DmJdbcDriver18.jar(适配 JDK8),避免类加载失败;
  2. 传入 / 挂载后,必须确保文件权限为644(可读),否则 Mycat 的 JVM 进程无法读取;
  3. 生效必须重启 Mycat(容器内/usr/local/mycat/bin/mycat restart)或重启容器。

总结

  1. 直接在 Docker 中传入文件完全可行,有docker cp(临时测试)和-v挂载(长期使用)两种方式;
  2. 快速验证选docker cp,长期使用优先选-v挂载(动态同步,无需重复操作);
  3. 核心效果:两种方式都能将驱动 / 配置传入容器,解决之前「容器内看不到文件」的问题,使 Mycat 能加载 DM 驱动并生效配置。

ok可以连接看到数据库了

END

如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 2:39:36

性能测试工具的原理与架构解析

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快在软件开发与运维领域,性能测试是确保系统稳定、高效运行的关键环节。性能测试工具作为实现这一目标的重要工具,通过模拟真实用户行为和负载…

作者头像 李华
网站建设 2026/6/10 11:14:04

基于PLC的电梯控制系统的设计

基于PLC的电梯控制系统的设计 第一章 绪论 电梯作为高层建筑的核心垂直运输设备,其控制系统的稳定性、安全性与高效性直接关系到人员出行体验和生命安全。传统电梯多采用继电器-接触器控制模式,存在逻辑修改困难、故障率高、维护成本高、响应速度慢等问…

作者头像 李华
网站建设 2026/6/6 1:11:54

【Docker进阶-01】Docker隔离原理与可视化界面-Portainer

【Docker进阶-01】Docker隔离原理与可视化界面-Portainer Docker架构容器与虚拟机Docker隔离原理可视化界面-Portainer /etc/docker/daemon.json 是Docker的核心配置文件。 Docker架构 Docker用Go编程语言编写,并利用Linux内核的多种功能来交付其功能。 Docker使用…

作者头像 李华
网站建设 2026/6/3 13:20:52

AI + 质量:高效工作新方法

当 AI 技术席卷各行各业,质量工作这个依赖严谨性、专业性和流程化的领域,正经历深刻变革。从文书编写到风险评估,AI 以多样化场景打破传统效率瓶颈,成为质量人的 “高效战友”。一、AI 直击质量工作痛点,覆盖全流程场景…

作者头像 李华
网站建设 2026/6/1 11:29:48

逐际动力加码具身智能大小脑融合技术,闵行推具身智能产业新政,特斯拉扩机器人产能,Figure AI拓人形机器人家用场景

逐际动力完成2亿美元B轮融资,加码具身智能大小脑融合技术国内具身智能龙头企业逐际动力宣布完成2亿美元B轮融资,国内外机构及产业资本联合加码,老股东持续跟投,融资资金将重点投入本体硬件制造、小脑基础模型及具身智能操作系统研…

作者头像 李华
网站建设 2026/5/9 20:23:18

力扣1046和1049学习笔记

1.概要碎石头问题,拿两个石头碰撞,抵消共同质量的部分,1046是每次选最重两个,1049是任意选,让质量尽可能小。2.大根堆每次维护最重,如果直接排序的话复杂度过高,因此可以用大根堆,它…

作者头像 李华