はい、どうも、浅いです
さて、今回のエラーというか、buildできなかったのを解決するの、まーじで大変だったんで、ちょっとそれについてまとめておきます
簡単に状況を説明すると、急にローカルのdockerコンテナが立ち上がらなくなり、ほぼ半日はコンテナを立ち上げるために戦っていたという感じです
結論なんですが、コンテナのplatformをlinux/x86_64からlinux/amdに変更したらうまくいったという感じです
そもそも、x86_64とamdって一緒の認識で、それをx86_64からamdに変えてもコンテナ動く訳ないよなぁとか思ってたら、動いて衝撃でした
背景
えー、今使っているコンテナのイメージをrubyの3.4.1-alpineのイメージにupgradeしました
そもそもci上とか、ほかの方のPC上ではdocker compose buildがちゃんと成功している状態でした
しかし、自分の環境では、なぜかbundle installでnetive extentionの関連でうまく依存関係が解決できずエラーで落ちてました
必要なライブラリなどは用意されているし、そもそもほかの方のPCの環境ではうまくいってるわけで、何でかなぁと思ってました
で、よくよく調べて行ってみると、もしかするとPCのアーキテクチャが影響してるかもしれないことがわかりました
自分のはarm64でM2チップを使ってました
ほかの方のはwindows環境だったり、intelチップのmacでした
で、もしかすると、自分のはcpuのアーキテクチャが、arm64、コンテナの立ち上げる環境がlinux/x86_64なので、その差異が影響しているかもと思いました
そして、コンテナのプラットフォームの設定を試しにamdに変えてみました
するとlinux/amdで行くようになりました
何でなんだ…
まじで理由がわからない…
さっきかいた気もしますが、要するにx86_64とamdは一緒のアーキテクチャで、別名です
だから同じはず
だけど、動くようになった…
amdで書く方が自然みたいなのはみましたが、どういう理屈なんだ…
おそらくですが、今回のエラーのトリガーは3.4.1-alpineにアップグレードしたことです
そして急にnative extention周りでbundle installが失敗するようになった原因は、コンテナのplatformの差異が原因そうです
なんかruby3.4.1-alpineになってから、そういう環境の指定などが影響するimageになったんでしょうか…?
そしたらdockerの良さがなくなってしまう気がしますけど、そんなupdate入ったのかな…そんなわけないよな…
とにかく何か知っている人がいれば教えて欲しいです
他に困っている人がいたら、以下の条件に当てはまるようなら、一回立ち上げるコンテナのplatformを変えてみるのはありかもしれません
要するにdocker-compose.ymlの記述ですね
- arm64のアーキテクチャを使用している
- M1、M2チップなどを使用
- ruby:3.4.1-alpineのdocker imageを使用している
- ほかの環境では動作していて、ローカル環境でdocker compose buildするとbundle installでコケる
全く、なかなか大変なエラーでした…でも何とか立ち上がってよかった…
ではー