2026/6/20 12:34:21
网站建设
项目流程
wordpress 站内消息,平面广告设计培训哪里学,阜城县网站建设报价,模板网站可以做推广吗在之前的文章中#xff1a;OpenEuler docker安装Mycat连接达梦DM数据库-CSDN博客 我已经安装并启动了mycat #xff0c;而且连接也是没有问题的#xff0c;但是后来我在用 navicat 进入其中的时候报错了
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复制到容器内对应的目录适合快速测试验证。完整操作步骤先按原有Dockerfile启动容器无需修改先启动起来# 1. 构建原有镜像如果没构建过 docker build -t mycat-original:v1.0 . # 2. 启动容器注释掉VOLUME不影响启动只是没有数据卷解耦 docker run -d --name mycat-temp -p 8066:8066 mycat-original:v1.0用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/用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/进入容器修改文件权限确保 JVM 可读取# 进入容器 docker exec -it mycat-temp /bin/bash # 修改驱动和配置文件权限 chmod 644 /usr/local/mycat/lib/DmJdbcDriver18.jar chmod 644 /usr/local/mycat/conf/schema.xml重启容器内的 Mycat使传入的文件生效# 容器内重启Mycat /usr/local/mycat/bin/mycat restart优缺点✅ 优点操作简单、快速无需修改Dockerfile适合临时测试、验证配置❌ 缺点容器删除后传入的文件会丢失仅存在于当前容器内下次启动新容器需要重新cp不适合长期使用。方式二容器启动时用-v挂载传入永久传入长期使用这是更推荐的长期使用方式启动容器时通过-v参数将宿主机的lib驱动、conf配置目录直接挂载到容器内对应目录宿主机的文件会动态同步到容器内修改宿主机文件无需重新传入重启容器即可生效。完整操作步骤宿主机准备好文件目录提前放好驱动和配置确保宿主机的/usr/local/docker/mycat/mycat目录下有对应的文件/usr/local/docker/mycat/mycat/ ├── lib/ │ └── DmJdbcDriver18.jar DM驱动标准命名 └── conf/ └── schema.xml 修正后的DM配置启动容器时添加-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 \ --privilegedtrue \ mycat-original:v1.0 你的原有镜像名验证容器内是否已同步到文件# 进入容器 docker exec -it mycat-permanent /bin/bash # 查看驱动是否存在 ls -l /usr/local/mycat/lib | grep DmJdbcDriver18.jar # 查看配置是否存在 cat /usr/local/mycat/conf/schema.xml优缺点✅ 优点文件永久同步宿主机修改驱动 / 配置后重启容器即可生效容器删除后宿主机文件仍保留下次启动新容器直接挂载即可适合长期使用❌ 缺点需要提前整理宿主机目录结构首次配置稍繁琐一次配置终身受益。关键补充两种方式的核心注意点传入的 DM 驱动必须命名为DmJdbcDriver18.jar适配 JDK8避免类加载失败传入 / 挂载后必须确保文件权限为644可读否则 Mycat 的 JVM 进程无法读取生效必须重启 Mycat容器内/usr/local/mycat/bin/mycat restart或重启容器。总结直接在 Docker 中传入文件完全可行有docker cp临时测试和-v挂载长期使用两种方式快速验证选docker cp长期使用优先选-v挂载动态同步无需重复操作核心效果两种方式都能将驱动 / 配置传入容器解决之前「容器内看不到文件」的问题使 Mycat 能加载 DM 驱动并生效配置。ok可以连接看到数据库了END如果觉得这份基础知识点总结清晰别忘了动动小手点个赞再关注一下呀 后续还会分享更多有关开发问题的干货技巧同时一起解锁更多好用的功能少踩坑多提效 你的支持就是我更新的最大动力咱们下次分享再见呀