/lib64/ld-linux-x86-64.so.2: No such file or directory エラー
このエラーは、Docker コンテナ内で x86_64 アーキテクチャ用にコンパイルされたバイナリを実行しようとした際に発生します。特に、macOS の Apple Silicon (M1/M2) チップを搭載したマシンでよく見られる問題です。
問題の理解
/lib64/ld-linux-x86-64.so.2
は、Linux のダイナミックリンカ(ローダ)です。このファイルは:
- x86_64 アーキテクチャ専用の実行ファイルです
- glibc(GNU C Library)ベースのシステムに存在します
- 実行ファイルの依存ライブラリを読み込む役割を担っています
エラーが発生する主な原因は:
WARNING
実行しようとしているバイナリが x86_64 用にビルドされているが、実行環境が異なるアーキテクチャ(特に ARM64)である場合
解決策
方法1: プラットフォームの明示的指定(推奨)
Docker で x86_64 プラットフォームを明示的に指定します。
Docker run の場合:
docker run --platform linux/x86_64 <image_name>
Docker Compose の場合:
services:
my-app:
platform: linux/x86_64
# 他の設定...
Dockerfile の場合:
FROM --platform=linux/x86_64 ubuntu:latest
# その他の命令...
方法2: Alpine Linux での互換ライブラリのインストール
Alpine Linux を使用している場合(musl libc を使用)、互換ライブラリを追加します:
# Alpine ベースイメージの場合
RUN apk add libc6-compat
# または
RUN apk add gcompat
TIP
Alpine Linux は軽量ですが、標準的な glibc ベースのディストリビューションと互換性の問題が発生することがあります。
方法3: 適切なベースイメージの選択
特定のパッケージ(例: OpenSSL)に依存するアプリケーションの場合、slim イメージの使用を検討してください:
FROM python:slim # または node:slim など
RUN apt-get update && apt-get -y install openssl
# 必要なパッケージを追加
根本原因の詳細
このエラーの背後にある技術的要因:
- アーキテクチャの不一致: M1/M2 Mac は ARM64 アーキテクチャですが、多くのバイナリは x86_64 用にビルドされています
- ライブラリの差異: Alpine Linux は musl libc を使用しますが、多くのアプリケーションは glibc を想定しています
- エミュレーション: Rosetta 2 によるエミュレーションが適切に設定されていない場合
パフォーマンスに関する注意点
WARNING
--platform linux/x86_64
を指定すると、ARM マシン上でのビルド時間が大幅に増加する可能性があります(報告例では200秒以上)。
まとめ
/lib64/ld-linux-x86-64.so.2
エラーは、主に以下の方法で解決できます:
- プラットフォームの明示的指定(最も一般的な解決策)
- 互換ライブラリの追加(Alpine Linux 使用時)
- 適切なベースイメージの選択(依存関係の問題に対処)
Apple Silicon Mac で Docker を使用する際は、アーキテクチャの互換性問題に常に注意を払い、必要に応じてプラットフォームを明示的に指定することが重要です。