Docker-N8N链接Oracle节点

最近想用docker-N8N做消息的推送,但是数据库是Oracle,这可麻烦了,N8N原生是不支持Oracle节点的,于是乎开始探索怎么才能新增Oracle节点

  1. 首先需要新增N8N的Oracle节点,一通搜搜+问AI找到n8n-nodes-oracle库,可以直接NPM安装,安装后发现可以找到OracleSql节点,大喜!执行报错libclntsh.so NOT FOUND。发现需要客户端
  2. Oracle版本为11.2.0.1.0,下载客户端instantclient-basic-linux.x64-11.2.0.4.0.zip
bash 复制代码
设置环境变量地址
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH
export PATH=/opt/oracle/instantclient:$PATH

libclntsh.so的软连接
ln -s libclntsh.so.11.1 libclntsh.so
  1. 执行后继续报错Error loading shared library libnsl.so.1,执行ldd libclntsh.so提示缺少libnsl.so.1文件,尝试安装libnsl
  2. N8N基础为镜像docker.n8n.io/n8nio/n8n基于Alpine Linux,因此执行apk update && apk add libnsl。再次查看libclntsh.so的依赖发现仍然提示缺少libnsl.so.1文件,怀疑是否安装libnsl失败了于是查看安装情况发现是成功了的,只是版本变化了【望天。。。】
bash 复制代码
/opt/oracle/instantclient # apk info -L libnsl 
libnsl-2.0.1-r0 contains: 
usr/lib/libnsl.so.3 
usr/lib/libnsl.so.3.0.0

于是尝试直接执行软连接看看能否成功

bash 复制代码
`ln -s /usr/lib/libnsl.so.3 /usr/lib/libnsl.so.1`

再次ldd,发现libnsl的依赖问题没有了

typescript 复制代码
    /opt/oracle/instantclient # ldd libclntsh.so
        /lib/ld-musl-x86_64.so.1 (0x7f90369db000)
        libnnz11.so => /opt/oracle/instantclient/libnnz11.so (0x7f9033c9f000)
        libdl.so.2 => /lib/ld-musl-x86_64.so.1 (0x7f90369db000)
        libm.so.6 => /lib/ld-musl-x86_64.so.1 (0x7f90369db000)
        libpthread.so.0 => /lib/ld-musl-x86_64.so.1 (0x7f90369db000)
        libnsl.so.1 => /usr/lib/libnsl.so.1 (0x7f9033c97000)
        libc.so.6 => /lib/ld-musl-x86_64.so.1 (0x7f90369db000)
        libaio.so.1 => /usr/lib/libaio.so.1 (0x7f9033c92000)
        libtirpc.so.3 => /usr/lib/libtirpc.so.3 (0x7f9033c67000)
        libintl.so.8 => /usr/lib/libintl.so.8 (0x7f9033c55000)
        libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x7f9033c12000)
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x7f9033b64000)
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x7f9033b3b000)
        libcom_err.so.2 => /usr/lib/libcom_err.so.2 (0x7f9033b35000)
        libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x7f9033b2a000)
        libkeyutils.so.1 => /usr/lib/libkeyutils.so.1 (0x7f9033b24000)
    Error relocating libclntsh.so: getcontext: symbol not found
    Error relocating libclntsh.so: canonicalize_file_name: symbol not found
    Error relocating libclntsh.so: __finite: symbol not found

但仍有一些报错,没有搞明白。尝试在N8N的Oracle节点执行sqlselect 1 from dual得到结果1!至此终于正常了。所以上面的symbol not found并不影响。

5.完整Dockerfile,如需其他版本客户端记得改下客户端zip

bash 复制代码
FROM docker.n8n.io/n8nio/n8n

USER root

RUN npm_config_user=root npm install -g n8n-nodes-oracle

ENV N8N_CUSTOM_EXTENSIONS "/usr/local/lib/node_modules/n8n-nodes-oracle"

RUN apk add --no-cache libaio wget unzip libnsl

COPY instantclient-basic-linux.x64-11.2.0.4.0.zip /tmp/

RUN cd /tmp && \
    unzip instantclient-basic-linux.x64-11.2.0.4.0.zip && \
    mkdir -p /opt/oracle && \
    mv instantclient_* /opt/oracle/instantclient && \
    rm -rf /tmp/instantclient-basic-linux.x64-11.2.0.4.0.zip

# 链接libclntsh.so
RUN ln -s /opt/oracle/instantclient/libclntsh.so.11.1 /opt/oracle/instantclient/libclntsh.so
# 链接libnsl.so.1
RUN ln -s /usr/lib/libnsl.so.3 /usr/lib/libnsl.so.1

ENV LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH
ENV PATH=/opt/oracle/instantclient:$PATH
ENV TNS_ADMIN=/opt/oracle/instantclient/network/admin

RUN rm -rf /var/cache/apk/*
相关推荐
OpenTiny社区2 小时前
直播分享|TinyVue 多端实战与轻量图标库分享
前端·vue.js·开源
神经星星3 小时前
入选AAAI 2025,浙江大学提出多对一回归模型M2OST,利用数字病理图像精准预测基因表达
数据库·人工智能·开源
NocoBase5 小时前
GitHub 上 Star 数排名前 40 的开发者工具
低代码·开源·资讯
huali6 小时前
unplugin-https-reverse-proxy 2.0 发布:革新移动端调试体验
前端·开源·vite
Kagol8 小时前
🎉TinyVue v3.22.0 正式发布:支持深色模式、增加基于 UnoCSS 的图标库、支持更丰富的 TypeScript 类型声明
前端·vue.js·开源
Nu119 小时前
前端大屏原理系列:拖拽组件到页面
前端·react.js·开源
蚝油菜花1 天前
斯坦福黑科技让笔记本GPU也能玩转AI视频生成!FramePack:压缩输入帧上下文长度!仅需6GB显存即可生成高清动画
人工智能·开源
AIBigModel1 天前
图灵奖得主LeCun:DeepSeek开源在产品层是一种竞争,但在基础方法层更像是一种合作;新一代AI将情感化
人工智能·开源