CircleCIをローカル環境で試そうとしたら"Unexpected environment preparation error: Error response from daemon: OCI runtime create~"のエラーにぶつかった話

はじめに
--
ローカル環境で.circleci/config.ymlの修正を行うために、CircleCI CLIを導入してみたのですが、タイトルのエラーが発生してしまい使えるようになるまで時間がかかってしまいました。
日本語の記事でまとまっているものが見当たらず、初学者の自分としては大変だったので、解決までの流れをまとめようと思いました。
同じエラーで困っている人の助けになったら幸いです。

環境
--
MacBook Air (M1, 2020)

CircleCI CLIを使おうとしたきっかけ
--
自分のポートフォリオにCircleCIを導入しようと考えていたのですが、config.ymlの記述があっているか確認をするためにgithubにpushをしないと確かめられないのはあまりにも効率が悪いと思っていました。
（もちろん無料枠で使うつもりだったので、試しすぎるとクレジットも無くなっちゃうのでは、、？とも思っていました。）

dockerについて色々試行錯誤ができる[Play with Docker](https://labs.play-with-docker.com/)のように、CircleCIを色々試行錯誤できるものはないのかな、と思い色々と調べていたところ、ローカル環境でconfig.ymlをチェックできるCircleCI CLIの存在を知り、インストールをしてみました。

↓公式の手順に沿って行えばインストールは問題なく行えると思います。

https://circleci.com/docs/ja/local-cli

※↓こちらの方の記事もわかりやすかったです

https://zenn.dev/wtkn25/articles/circleci-local-setting


さて使おう！と思ったらエラーが発生。。
---
インストールが終わったので早速CircleCIを使う予定のディレクトリに移動して、
config.ymlに記載したjobを実行してくれる下記のコマンドを打ってみました。
~~~
circleci local execute
~~~

そうすると、下記のエラーが発生。
~~~
Error: 
Unexpected environment preparation error: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:385: applying cgroup configuration for process caused: cannot enter cgroupv2 "/sys/fs/cgroup/docker/fc0799a00885a53e63b75d735b16d8ddfc197209f7277880e9ff076179a40594/75198cc6fcc89554b5831fdbfeb2f9a2fe33bb5df1260f03fb38dc419f34718c" with domain controllers -- it is in an invalid state: unknown

Step failed
Task failed
Error: Unhandled prepare executor error: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:385: applying cgroup configuration for process caused: cannot enter cgroupv2 "/sys/fs/cgroup/docker/fc0799a00885a53e63b75d735b16d8ddfc197209f7277880e9ff076179a40594/75198cc6fcc89554b5831fdbfeb2f9a2fe33bb5df1260f03fb38dc419f34718c" with domain controllers -- it is in an invalid state: unknown
~~~

エラー文を翻訳してみても、デーモンが悪さをしているのかな、、？と思うくらいで自分のエンジニアレベルが低いのが悪いかもしれませんが、原因は特定できず、このエラーに関して色々検索しても日本語の記事があまり出てこなかったので、苦戦しました。。

config.ymlの記述が問題？
--
エラー文の内容から可能性は低いと思いましたが、自分のconfig.ymlの書き方が悪いのでは？と思い、
公式が用意しているデモデータをgit cloneして同じように試してみたものの、同じエラーが発生。
公式デモデータが失敗したので、自分のconfig.ymlの書き方は原因ではないことははっきりしました。
~~~
mkdir circleci-demo-go 
cd circleci-demo-go
git clone https://github.com/CircleCI-Public/circleci-demo-go.git
circleci local execute --job build
~~~

githubのissueで海外の方が議論されていた！
--
日本語の記事ではなく、海外の方がこの問題についてgithubでissueを立てて議論しているページを発見。
chomeの翻訳機能を使い、コメントを読んでいると、Docker Desktopのバージョンによってこのエラーが発生してしまい、4.2.0までグレードダウンさせればエラーは発生しなくなるということが書いていました。

https://github.com/CircleCI-Public/circleci-cli/issues/672

自分のDocker Desktopのバージョンは4.7.1だったので、4.2.0にバージョンを下げました。
（下記の記事がわかりやすく、参考にさせて頂きました。）

https://qiita.com/A-Kira/items/8ae66838b019683704d1

エラー解決！
--
グレードダウン後にデモデータのjobを実行したところ、sucsess!の文字が！無事CircleCI CLIを作動させることができました！
（Errorもいくつか出ますがローカルではサポートしていない機能があり、エラーが出るのは避けられないようです。チェックできない部分は実際にpushして確認するしかないのかも、、）

~~~
~noMacBook-Air circleci-demo-go % circleci local execute --job build
Fetching latest build environment...
Docker image digest: sha256:b5f77343f9c9603296817b39c323ca562dd60e9ba25fe89fa2ce54a930bac402

~長いため省略~

Error: Failed uploading test results
Error not supported

{"Runner":true,"build_uri":"","correlation":"7b26c4a4","error":"not supported","job-id":"","level":"error","msg":"adapter duplicator failednot supported","task-id":"localbuild-1659446666","time":"2022-08-02T13:26:02Z"}
{"Runner":true,"build_uri":"","correlation":"7b26c4a4","error":"tar operation failed - io: read/write on closed pipe","job-id":"","level":"error","msg":"closing pipe for archiver with error","task-id":"localbuild-1659446666","time":"2022-08-02T13:26:02Z"}
{"Runner":true,"build_uri":"","correlation":"7b26c4a4","error":"tar operation failed - io: read/write on closed pipe","job-id":"","level":"error","msg":"closing pipe for archiver with error","task-id":"localbuild-1659446666","time":"2022-08-02T13:26:02Z"}
{"Runner":true,"build_uri":"","correlation":"7b26c4a4","error":"tar operation failed - io: read/write on closed pipe","job-id":"","level":"error","msg":"closing pipe for archiver with error","task-id":"localbuild-1659446666","time":"2022-08-02T13:26:02Z"}
Step canceled
Success!
~~~

なんとかローカルで試行錯誤できる環境が作れたおかげで、CircleCIの本番チェックでも自動テスト(RSpec/Rubocop/Jest）を通すことができました！
自分はローカルでsuccess!の文字が出ても本番環境でエラーが出てしまったので、そこはエラー文を読んで修正していくしかなさそうです。

最後に
--
日本語の記事で解決できなかったエラーを海外の記事を読んで解決できたのは純粋に嬉しかったです。
今回の件で少し海外の記事を読むこと・参考にすることを無意識に避けてしまっていた自分もいたことに気づき、
克服することができたので大きな自信になりました。

まだ実務経験がないプログラミング初学者ですが、アウトプットは自分の理解が深められると思い今回の記事を書かせて頂きました。
間違った箇所がございましたら、コメントでご指摘いただけますと幸いです。
最後まで読んでくださりありがとうございました！