news 2026/4/15 9:01:30

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/4/8 12:08:43

iSolarBP Pro:赋能设计院,如何用数智化引擎重构核心竞争力?

在“双碳”目标驱动下,分布式光伏市场爆发式增长,设计院作为产业链的关键一环,却面临着“项目多、时间紧、要求高、利润薄”的多重压力。传统依赖CAD手工绘图、经验估算的模式,已难以适应新形势下的市场竞争。iSolarBP Pro专业版&…

作者头像 李华
网站建设 2026/4/14 3:49:19

基于PLC的风电控制系统

基于PLC的风电控制系统设计与实现 第一章 绪论 风力发电作为清洁能源利用的核心形式,其控制系统的稳定性、精准性直接决定风机的发电效率、设备寿命与运行安全。传统风电控制多采用专用控制器,存在拓展性差、故障诊断能力弱、对复杂风况的自适应调节不足…

作者头像 李华
网站建设 2026/4/14 5:07:10

基于Java的旅游网站的设计与实现(11873)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/9 2:15:21

基于Java的商店会员系统(11875)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/8 13:00:00

https://blog.csdn.net/2401_84760322/article/details/149808483?spm=1001.2014.3001.5502

渗透测试与入侵的区别 渗透测试:以安全为基本原则,通过攻击者以及防御者的角度去分析目标所存在的安全隐患以及脆弱性,以保护系统安全为最终目标。 入侵:通过各种方法,甚至破坏性的操作,来获取系统权限以…

作者头像 李华
网站建设 2026/4/8 14:18:14

阿里云携手模思智能构建一站式多模态数据处理平台

模思智能简介 上海模思智能科技有限公司(MOSI Intelligence)成立于2024年11月,是国内深度情境智能领航者,依托深厚的学术积淀与卓越的工程落地能力,致力于构建下一代全感官人机交互体系。公司由复旦大学知名教授邱锡鹏…

作者头像 李华