2021/05/30時点で、M1MacでビルドしたdockerイメージはCircleCIでは使えない
言いたいことはタイトルの通り。経緯あたりを書いていく。
インフラをECSに移行するにあたって、CIと本番環境で使うdockerイメージを共通にしたいという気持ちがあるので、自前でビルドしたイメージをCIでも使おうとしていた。
しかし、M1MacでビルドしたイメージをECRにpushしてcircleciでpullすると、後述のエラーが起きてしまう。
Unexpected environment preparation error: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:319: getting the final child's pid from pipe caused \"EOF\"": unknown
Error response from daemon: OCI runtime create failed: container_linux.go:341: creating new parent process caused "container_linux.go:1923: running lstat on namespace path \"/proc/28669/ns/user\" caused \"lstat /proc/28669/ns/user: no such file or directory\"": unknown
それらのエラーメッセージでぐぐると、ローカルでも同じエラーが起きるはずだよ、みたいなことが書いてあったんだけど、ローカルだと動くんじゃよ...。
$ circleci local execute --job rails/do_something
また、運が悪いことにこの作業中に、IntelなMacでもビルドしたイメージをpushしていたこともあって、(Intel Macでビルドしていた)特定のイメージではspinupできるのに、HEADのDockerfileでのビルドだと動かない、ということに直面していて謎を深めていた。
最終的に問題の切り分けになったのは、FROM circleci/ruby:2.6.6-browsers
だけを書いたイメージを使うのと ビルド済みのcircleci/ruby:2.6.6-browsers
を使う場合で結果が変わったので、これはDockerfileが問題ではないということに気がついて急速に原因が判明した。
M1Macはpreview版だったのを完全に忘れていたし、dockerイメージってどこでも動くんでしょという思い込みがあって自分の勉強不足なんですが、エラーメッセージがわかりにくすぎる。
おわり
-
category:
- 日記