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/3/28 22:45:33

Cypress

Cypress是一个专注于现代网页应用的前端测试框架。它最大的特点是直接运行在浏览器内部,可以实时观察和测试应用。这就像是你在开车时,不再通过遥控器指挥,而是直接坐进驾驶舱去操控,对车况和路况的感知更直接、反馈更即时。&…

作者头像 李华
网站建设 2026/4/10 0:35:35

k6是什么

1. 它是什么? k6 是一个专注于性能测试的工具,主要用来模拟大量用户访问一个网站、应用或接口,以检验系统在高负载下的表现。它的核心是一个负载生成器。 一个简单的类比是:假设你要测试一个新开的快递站能同时处理多少包裹。你…

作者头像 李华
网站建设 2026/3/24 0:52:30

基于Java的旅游资源网站平台设计与实现(11874)

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

作者头像 李华
网站建设 2026/3/28 18:03:54

学网络安全主要学什么内容?

想入行网络安全,不少新手都会纠结入门基础和学习内容。其实网络安全入门对基础要求并不高,零基础也能逐步上手,那么学网络安全需要什么基础?学什么内容?具体请看下文。学网络安全需要什么基础?如果你想参加网络安全培训和学习,…

作者头像 李华
网站建设 2026/4/13 6:56:07

实用linux命令行

1.概述 在实际做实验的过程中一直用的 2.命令行 2.1激活环境 conda activate 环境名 2.2创造文件夹和文件 mkdir 文件夹名 touch 文件 2.3创造后台程序,让服务器可以在被关闭后继续跑 tmux new -s 名字 打卡 tmux attach -t 名字 2.4查看文件、修改文件…

作者头像 李华
网站建设 2026/4/12 7:46:57

把所有业务都转成 MCP,太傻了!AI Skill 才是正道

MCP(Model Context Protocol)可能火得有些过头了。自从 Anthropic 把这套协议抛出来,不少同行就开始坐不住,仿佛一夜之间,不把自家的业务接口重写成 MCP Server,就拿不到 AI 时代的入场券了。 每隔几年&am…

作者头像 李华