概要
Python数理最適化ライブラリpulp
をdocker-compose
上で利用したら以下のエラーになりました。
/lib64/ld-linux-x86-64.so.2: No such file or directory
'Pulp: Error while trying to execute, use msg=True for more details/usr/local/lib/python3.6/site-packages/pulp/solverdir/cbc/linux/64/cbc'
前提(Mac環境)
- 機種ID:MacBookPro18,3
- macOS:Monterey
- チップ:Apple M1 Pro
- メモリ:16GB
原因はホストOS
調べてみると、このエラーは、Docker環境下ではM1チップで実行不可能なソルバーが実行されているのではないか?とのこと。
参考:
Pythonの最適化ライブラリPuLP をM1 Mac × Dockerで動かす)
ということで、原因は、ホストOSのアーキテクチャにあることがわかりました。
$ uname -m
arm64
上記のように自分のホストOSではarm64
。
Dockerはデフォルトでホストのアーキテクチャに合わせたイメージを選択する。
つまり、arm64
であればそれに合わせたイメージが作成されることになります。
しかし、pulp
で利用されるソルバー(内部的にはC++で書かれている?)は特定のアーキテクチャに依存したバイナリを含んでいる可能性があるとのこと。ということで、Dockerイメージをエラーメッセージで表示されているlinux-x86-64
にて作成するようにすれば良いのです。
解決方法
version: '3.3'
services:
django:
build: ./
container_name: sample-django
platform: linux/x86_64 ## これを追加する
ports:
...
上記のようにlinux/x86_64
を指定して再ビルドすることで、Dockerはそのサービスをx86_64
アーキテクチャのLinuxで実行するようになります。
これにより、/lib64/ld-linux-x86-64.so.2
ライブラリがコンテナ内に存在するようになり、エラーが解消されました。
参考
/lib64/ld-linux-x86-64.so.2: No such file or directory error