2016-06-30 5 views
1

最近、私はNodeプロジェクトを実行するためにDockerを使い始め、Oracleインスタントクライアントドライバを追加したいと考えました。私の知る限り、Oracleのインスタントクライアントドライバはglibcライブラリに対してコンパイルされていますが、Dockerの画像はAlpineベースで、muslライブラリが含まれています。glibcでシンボルが見つかりません

私はglibcライブラリを含める方法が必要でした。glibcライブラリを圧縮パッケージとしてパッケージ化したdocker-glibc-builderを見つけました。

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) 

誰でもこのようなエラーが発生しますか?

答えて

2

だから私は、あなたがない混在させることができますし、単一のプロセスで二つの別々のlibcライブラリが一致していることのglibcライブラリ

注意を含める方法を必要としていました。 のいずれかを選択する必要があります。さらに、で、実行時に使用するライブラリと同じライブラリを作成する必要があります(Dockerイメージにランタイムパッケージを含めるだけでは不十分です)。

According to musl wiki、muslはgetcontextを提供しません。あなたが得るエラーは、あなたがglibcではなくmuslを使い続けていることと一貫しています。

+0

Alpineは 'musl'を' libc'で置き換えることができますか? – nixgadgets

+0

@nixgadgets Alpineが置換を許可している場合、すべてのバイナリを完全に再構築する必要があるので、私はそれが真実であると真剣に疑う。実際に何かを置き換える必要はないことに注意してください。あなたは 'glibc'に対してNodeを構築する必要があります。 –

+0

それは何か私は試してみました。 glibcに対するノードの構築。しかし、私はそれを正しくやっていない気がします。 LD_LIBRARY_PATHを設定するだけでした。 glibcのPythonも手に入れることができるかもしれません。 – nixgadgets

関連する問題