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/*
相关推荐
晚霞的不甘35 分钟前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
猫头虎1 小时前
OpenClaw-VSCode:在 VS Code 里玩转 OpenClaw,远程管理+SSH 双剑合璧
ide·vscode·开源·ssh·github·aigc·ai编程
一只大侠的侠1 小时前
Flutter开源鸿蒙跨平台训练营 Day12从零开发通用型登录页面
flutter·开源·harmonyos
wenzhangli71 小时前
OoderAgent 企业版 2.0 发布的意义:一次生态战略的全面升级
人工智能·开源
rainbow68891 小时前
C++开源库dxflib解析DXF文件实战
开发语言·c++·开源
猫头虎1 小时前
基于信创openEuler系统安装部署OpenTeleDB开源数据库的实战教程
数据库·redis·sql·mysql·开源·nosql·database
零一iTEM1 小时前
MAX98357A_音频输出测试
单片机·嵌入式硬件·开源·音视频·硬件工程
猫头虎2 小时前
如何使用Docker部署OpenClaw汉化中文版?
运维·人工智能·docker·容器·langchain·开源·aigc
一只大侠的侠2 小时前
Flutter开源鸿蒙跨平台训练营 Day 15React Native Formik 表单实战
flutter·开源·harmonyos
yumgpkpm2 小时前
预测:2026年大数据软件+AI大模型的发展趋势
大数据·人工智能·算法·zookeeper·kafka·开源·cloudera