1

最近、Docker を使用して Node プロジェクトを実行し始め、Oracle インスタント クライアント ドライバーを追加したいと考えました。私の知る限り、Oracleインスタントクライアントドライバーはライブラリに対してコンパイルされていますが、ベースglibcのDockerイメージにはライブラリが含まれています。Alpinemusl

glibcそのため、ライブラリを含める方法が必要であり、ライブラリを圧縮パッケージとしてパッケージ化するdocker-glibc-builderに出くわしました。glibc

ライブラリをコンテナーに含めた後glibc、Node プロジェクトが Oracle をインスタント ドライバーと呼ぶたびに、次のエラーに気付き始めました。

Error: Error relocating /opt/oracle/drivers/instantclient/libclntsh.so.11.1: getcontext: symbol not found
    at Error (native)
    at Object.Module._extensions..node (module.js:568:18)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (node_modules/oracledb/lib/oracledb.js:32:19)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (node_modules/oracledb/index.js:1:80)

誰でもそのようなエラーに遭遇しますか?

4

1 に答える 1

4

そのため、glibc ライブラリを含める方法が必要でした

1 つのプロセスで 2 つの別々のライブラリを組み合わせることはできないことに注意してください。どちらかを選択libcする必要があります。さらに、実行時に使用するのと同じライブラリに対してビルドする必要があります (実行時パッケージを Docker イメージに含めるだけでは十分ではありません)。

musl wiki によると、musl は提供していませんgetcontext。表示されるエラーは、glibc ではなく、musl を使用し続けていることと一致しています。

于 2016-07-01T08:47:14.247 に答える