踩坑记
springboot项目使用docker部署。由于tdengine原生连接方式需要安装客户端,第一想法是宿主机装好客户端,然后映射驱动到容器内部,网上找的教程也基本是这种思路。尝试了一天失败了。
错误1:libjemalloc.so.2 file: No such file or directory。大概意思就是没有这个文件嘛。进入容器内部试了一下确实没有。那就安装一个呗
错误2:java.lang.UnsatisfiedLinkError: /usr/lib/libtaos.so: /usr/lib/x86_64-linux-gnu/libjemalloc.so.2: cannot allocate memory in static TLS block
到这个错误感觉是思路错了。百度第一个错误基本没有解决方案。tdengine官方找文档、群里问别人都是个蛋。然后重点来了去github上搜issue就找到相同的错误1。得到的解决方案是直接在容器内部安装客户端
Caused by: java.lang.UnsatisfiedLinkError: /usr/lib/libtaos.so.3.0.4.0: libjemalloc.so.2: cannot open shared object file: No such file or directory · Issue #20988 · taosdata/TDengine · GitHub
宿主机安装客户端其实是可以的,但是可能是我使用的版本问题导致的
问其他大佬说是可以成功的就映射两个文件
-v /etc/taos/taos.cfg:/etc/taos/taos.cfg \
-v /usr/lib/libtaos.so:/usr/lib/libtaos.so \
确定走方案2 容器内部安装客户端。基本就是改dockerfile了
1.下载对应的客户端,放入dockerfile所在文件夹。对的客户端很重要不然会连接失败
建立连接 | TDengine 文档 | 涛思数据
2.dockerfile内也就是添加几句,copy、解压、执行脚本
# 复制到tmp文件夹下
COPY TDengine-client-3.0.5.0-Linux-x64.tar.gz /tmp
# 切换文件夹
WORKDIR /tmp
# 解压
RUN tar xvf TDengine-client-3.0.5.0-Linux-x64.tar.gz
RUN ls
# 切换文件夹
WORKDIR /tmp/TDengine-client-3.0.5.0
RUN ls
# 执行安装脚本
RUN bash install_client.sh
# 可以删除安装包减少容器体积
3.安装完成后需要编辑 taos.cfg
文件
这里可以修改宿主机文件如何映射到容器内部。(默认路径/etc/taos/taos.cfg),将 firstEP
修改为 TDengine 服务器的 End Point,例如:h1.tdengine.com:6030。
总结:坑多报错别百度(看情况哈),说是国内数据库国内教程却少的可怜、遇到报错去github里面搜Issue估计还来的快里面我看已经记录了991个问题。
加个官方群吧没社区(github算吗)群里提问还是会有人解答一下的,但是效率不高提问的人太多。
多看文档、这不是mysql那些数据库先入为主的想法会让自己走很多弯路,文档里面很多细节会忽略掉。像数据库原生、rest连接字符串都不知道是个啥为啥会有两个呀没细看文档满脑疑问,那些个创建表语句写一个给你来一个。
下载的客户端里面有代码示例,可以打开看看代码,复制sql、代码比自己一步步去试探语法来的快。