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/*
相关推荐
魔乐社区7 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
冬奇Lab10 小时前
开源项目第242期:HyperFrames —— 写 HTML 就能渲染视频,专为 AI Agent 设计的确定性视频框架
人工智能·开源·音视频开发
AI日报派送佬11 小时前
2026年10月19日AI行业日报|三星联合台积电代工英伟达HBM裸片,智谱开源法律大模型,清华发布智能体操作系统PilotDeck 2.0
人工智能·开源·英伟达·智能体·anthropic·ai日报·法律大模型
Tangyuewei11 小时前
小米的 Coding Agent 开源了
人工智能·开源·ai编程
程序员老赵13 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
TTATTC13 小时前
为什么单会话聊天做不好复杂工程?Claude Code 创作者的并发 Worktree 与记忆闭环实践
docker·开源
TTATTC13 小时前
状态机驱动长事务,还是 DAG 编排高并发?高可靠业务流程引擎的双核架构设计
docker·开源
钱栈up13 小时前
GitHub 热榜实测|REA:用 Agent 逆向一切
typescript·开源·github
字节跳动开源13 小时前
ByteDance 2026 上半年 Linux 内核贡献回顾
linux·开源
阿里云云原生16 小时前
云栖实录丨面向 AgenticOps 的开源建设:采集标准化、统一语义建模与能力评测
云原生·开源