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/*
相关推荐
TeDi TIVE6 小时前
开源模型应用落地-工具使用篇-Spring AI-高阶用法(九)
人工智能·spring·开源
冬奇Lab8 小时前
一天一个开源项目(第79篇):生化危机女主角亲自开源的 AI 记忆系统 MemPalace
人工智能·开源·资讯
智慧地球(AI·Earth)8 小时前
面向开源生态的高性能大模型 GLM-5.1 发布:技术性能达国际前沿水准
开源
peterfei12 小时前
若爱 IfAI v0.4.2 发布:技能市场上线,重新定义 AI 编辑器的可扩展性
人工智能·开源
Hommy8812 小时前
【开源剪映小助手】视频生成流程
开源·github·音视频·剪映小助手
不做超级小白13 小时前
把图片压小,但不糊:reduceUrImgs项目关键点拆解
前端·开源·node.js
做个文艺程序员14 小时前
Spring Boot 项目集成 OpenClAW【OpenClAW + Spring Boot 系列 第1篇】
java·人工智能·spring boot·开源
OpenTiny社区14 小时前
生成式UI,AI交互的下一个十年?OpenTiny在QCon 2026的深度分享
前端·开源·github
扬帆破浪14 小时前
WPS 文字免费开源AI插件:察元 AI 文档助手如何把大模型接进日常写作
人工智能·开源·wps
帅进超14 小时前
一行代码,让 Claude Code / Gemini / Codex 接入任意 LLM
开源