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/*
相关推荐
星光一影3 小时前
供应链进销存源码uniapp全开源ERP多仓库管理系统pc+app手机端
mysql·elementui·uni-app·开源·php·phpstorm·1024程序员节
DO_Community7 小时前
利用腾讯开源 Hunyuan3D 2.1:在 DigitalOcean GPU Droplet 上快速搭建 3D 模型
人工智能·3d·开源·llm·aigc·大语言模型
路由侠内网穿透11 小时前
本地部署开源物联网平台 ThingsBoard 并实现外部访问( Windows 版本)
运维·服务器·windows·物联网·开源
摸鱼仙人~11 小时前
GitHub高质量的开源博客项目推荐
开源·github
云雾J视界12 小时前
RISC-V开源处理器实战:从Verilog RTL设计到FPGA原型验证
fpga开发·开源·verilog·risc-v·rtl·数字系统
CoderJia程序员甲13 小时前
GitHub 热榜项目 - 日榜(2025-10-29)
ai·开源·github·1024程序员节·ai教程
DolphinScheduler社区16 小时前
小白指南:Apache DolphinScheduler 补数据功能实操演示
java·大数据·开源·apache·海豚调度·大数据工作流调度
北邮-吴怀玉16 小时前
3.1.1.1 大数据方法论与实践指南-开源工具说明-Apache NiFi
大数据·开源·apache
兆龙电子单片机设计17 小时前
【STM32项目开源】STM32单片机智能台灯系统
stm32·单片机·物联网·开源·毕业设计