当前位置: 首页 > news >正文

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

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

http://www.jsqmd.com/news/334270/

相关文章:

  • 三分钟速通,网工必知的50个存储技术概念
  • 研究生不会读文献,真的很致命!
  • R/W轴2000mm/s高速,高精度晶圆搬运机械手有哪些选择?
  • 实战|记录某次“有趣的“挖矿木马排查, 从零基础到精通,收藏这篇就够了!
  • 强实时PC控制提升半导体划片机加工效率与精度
  • 贪心算法,优先队列(大小根堆采用)
  • 2026陕西婚恋平台TOP5:精准脱单指南,最靠谱平台、最受欢迎机构推荐 - 深度智识库
  • AT_abc441_e 学习笔记
  • Appium 2.x + 云真机平台做移动端自动化测试
  • AT_abc442_d 学习笔记
  • 建议收藏:大模型技术全景图:概念、训练与应用全解析
  • 2026年五大导视系统标识标牌设计制作公司口碑推荐及解析 - 深度智识库
  • 用HTTPX + Pytest + Pydantic + 契约测试做接口自动化
  • 实用指南:网络安全培训
  • k6是什么
  • 性能测试工具的原理与架构解析
  • Playwright + Pytest + Allure的组合做web ui测试
  • 小白也能看懂系列——安全编码(2)
  • P14170 二分图最大匹配期望 学习笔记
  • Selenium + Pytest + Allure的组合做web ui测试
  • 2026年高端全屋定制厂家推荐,不容错过的五大品牌 - 睿易优选
  • 基于PLC工厂的锅炉水位自动控制系统的设计与实现
  • 2026最新陕西婚恋平台五大甄选:深耕本土精准脱单,红娘沈大妈 Real 真心婚恋领跑西北 - 深度智识库
  • Cypress
  • Linux自学教材02
  • Claude Code | Rules 最佳配置案例(中文)
  • Oracle数据库操作基础2
  • 2026年版|大模型企业运营落地全流程(小白/程序员必收藏,从入门到进阶)
  • 基于PLC的电梯控制系统的设计
  • 复现论文《Fair Semi-distributed Resource Allocation Scheme over Relay-Enhanced OFDMA Networks》的代码实现