【初心者向け】Mac移行後にDockerが起動しない時の原因と解決方法まとめ
はじめに
新しいMacbookに乗り換えたところ、Dockerを使ったRails開発環境が全く起動しなくなりました。
経緯は、
macbook air(M1)からmacbook pro(M5)へapple内蔵の移行アシスタント.appを使用して移行
↓
macbook proでdocker起動し、docker compose up
↓
エラー
最終的に複数の問題が連鎖していました。解決までの流れをまとめます。
環境
macbook air(M1) → macbook pro(M5) へ移行
Docker version 28.4.0
発生したエラー
① Docker起動時のエラー
docker compose upとしたところ、
unable to get image 'postgres:17':
request returned 500 Internal Server Error for API route and
version 〜略〜, check if the server supports the requested API version
解説すると、
unable to get image 'postgres:17'
→ postgres:17 というイメージ(設計図)が取得できなかった
request returned 500 Internal Server Error
→ Dockerの内部サーバーがエラーを返した
check if the server supports the requested API version
→ DockerのAPIバージョンが対応しているか確認して
だそうです。
まずdocker infoでdocker desktopが正常に起動しているか確認しました。
〜略〜
Server:
ERROR: request returned 500 Internal Server Error 〜略〜
同じような文言が出てきました。どうやらサーバー側の応答ができていないようです。
docker desktopを見に行くと、以下のモーダルが出ていました。
An unexpected error occurred
Docker Desktop encountered an unexpected error and needs to close.
Search our troubleshooting documentation to find a solution or workaround. Alternatively, you can gather a diagnostics report and submit a support request or GitHub issue.
starting engine: engine linux/virtualization-framework failed to start: ensuring disk: cannot resize "/Users/<略>/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw" to 887726MiB: truncate /Users/`<略
>/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw: permission denied
最後の一文を見るとDockerの仮想ディスク(Docker.raw)への権限が拒否されているためDocker.raw をresizeできないと書いてあります。
仮想ディスク(Docker.raw)への権限を修正するため、ディレクトリの所有者を自分自身に変更するコマンドを実行しました。
$ sudo chown -R $(whoami) ~/Library/Containers/com.docker.docker/Data/vms/0/data/
【Macbook移行】新しいmacbookに移行後dockerが立ち上がらない&rails開発環境が立ち上がらない時の解決までのまとめ
はじめに
新しいMacbookに乗り換えたところ、Dockerを使ったRails開発環境が全く起動しなくなりました。
経緯は、
macbook air(M1)からmacbook pro(M5)へapple内蔵の移行アシスタント.appを使用して移行
↓
macbook proでdocker起動し、docker compose up
↓
エラー
最終的に複数の問題が連鎖していました。解決までの流れをまとめます。
発生したエラー
① Docker起動時のエラー
docker compose upとしたところ、
unable to get image 'postgres:17':
request returned 500 Internal Server Error for API route and
version 〜略〜, check if the server supports the requested API version
解説すると、
unable to get image 'postgres:17'
→ postgres:17 というイメージ(設計図)が取得できなかった
request returned 500 Internal Server Error
→ Dockerの内部サーバーがエラーを返した
check if the server supports the requested API version
→ DockerのAPIバージョンが対応しているか確認して
だそうです。
まずdocker infoでdocker desktopが正常に起動しているか確認しました。
〜略〜
Server:
ERROR: request returned 500 Internal Server Error 〜略〜
同じような文言が出てきました。どうやらサーバー側の応答ができていないようです。
docker desktopを見に行くと、以下のモーダルが出ていました。
An unexpected error occurred
Docker Desktop encountered an unexpected error and needs to close.
Search our troubleshooting documentation to find a solution or workaround. Alternatively, you can gather a diagnostics report and submit a support request or GitHub issue.
starting engine: engine linux/virtualization-framework failed to start: ensuring disk: cannot resize "/Users/<略>/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw" to 887726MiB: truncate /Users/`<略
>/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw: permission denied
最後の一文を見るとDockerの仮想ディスク(Docker.raw)への権限が拒否されているためDocker.raw をresizeできないと書いてあります。
仮想ディスク(Docker.raw)への権限を修正するため、ディレクトリの所有者を自分自身に変更するコマンドを実行しました。
$ sudo chown -R $(whoami) ~/Library/Containers/com.docker.docker/Data/vms/0/data/
※ chmod での権限変更も試しましたが、結果的にDocker.raw自体が破損していたため解決には至りませんでした。
Docker.rawとは
すべてのDockerデータを含むディスクイメージのことです。
このファイルにはコンテナやイメージを構成する複数のファイルの仮想環境データが入っています。
② Docker Desktopがクラッシュ
しかし、再度dockerを起動したところ、
An unexpected error occurred Docker Desktop encountered an unexpected error and needs to close.
Search our troubleshooting documentation to find a solution or workaround. Alternatively, you can gather a diagnostics report and submit a support request or GitHub issue.
service disk failed: mounting read write disk: extending: running resize2fs: exit status 1
最後の一文にあるようにDocker.rawの中のファイルシステム拡張に失敗しているようです。AIに聞くとほぼ確実に中身が壊れているようなので、dockerを初期化することにしました。
docker.rawファイルが壊れているので消し、docker.raw初期化しました。
$ rm ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
※ この操作により、Docker内のすべてのコンテナ・イメージ・ボリュームが削除されます。
Docker Desktopを起動すると新しいDocker.rawが自動で作成されます。
問題なくdockerが起動したことを確認できました。
③ dockerイメージ、コンテナ起動後、Node_modulesがないためエラー
$ docker compose build
$ docker compose up
した後、
〜略〜
esbuild: not found
〜略〜
Error: Can't resolve 'daisyui'
〜略〜
が出ました。
esbuildは、JavaScriptやTypeScriptのファイルをまとめて圧縮・変換するツールで、
daisyUIは、TailwindCSSのUIライブラリです。
つまり、
プロジェクトのパッケージマネージャーが入っていないためエラーになっているようです。
Node.jsの依存パッケージ(node_modules)が削除されていたため、
以下コマンドで再インストールしました。
$ docker compose run --rm web(サービス名) yarn install
インストール後、docker compose upでコンテナ作成し、
無事railsの開発環境が起動!
原因
今回の問題は1つではなく、以下が連鎖していました:
- Dockerの権限不整合
- Docker仮想ディスク(Docker.raw)の破損
- node_modules未インストール
学び
Docker.rawが壊れたら修復はほぼ難しそう
→ 修復も考えたのですが、開発環境のデータは消しても問題なかったので初期化を選択しました。初期化が最短なようです。
Docker初期化するとnode_modulesも消える
→ パッケージマネージャをインストールするのを忘れないようにして下さい。
おわりに
sudoコマンドのような権限系のコマンドを初めて使いましたが、もしかすると最初からdocker.rawファイルを削除していたらコマンドを実行しなくてよかった気がします。
この記事はプログラミング初心者が書いた記事になります。
間違いがございましたらご連絡いただけますと幸いです。
引用文献
https://qiita.com/peishi/items/83ef8a50a39b33774a0d
:::note info
Docker.rawとは
すべてのDockerデータを含むディスクイメージのことです。
このファイルにはコンテナやイメージを構成する複数のファイルの仮想環境データが入っています。
:::
② Docker Desktopがクラッシュ
しかし、再度dockerを起動したところ、
An unexpected error occurred Docker Desktop encountered an unexpected error and needs to close.
Search our troubleshooting documentation to find a solution or workaround. Alternatively, you can gather a diagnostics report and submit a support request or GitHub issue.
service disk failed: mounting read write disk: extending: running resize2fs: exit status 1
最後の一文にあるようにDocker.rawの中のファイルシステム拡張に失敗しているようです。AIに聞くとほぼ確実に中身が壊れているようなので、dockerを初期化することにしました。
docker.rawファイルが壊れているので消し、docker.raw初期化しました。
$ rm ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
Docker Desktopを起動すると新しいDocker.rawが自動で作成されます。
問題なくdockerが起動したことを確認できました。
③ dockerイメージ、コンテナ起動後、Node_modulesがないためエラー
$ docker compose build
$ docker compose up
した後、
〜略〜
esbuild: not found
〜略〜
Error: Can't resolve 'daisyui'
〜略〜
が出ました。
esbuildは、JavaScriptやTypeScriptのファイルをまとめて圧縮・変換するツールで、
daisyUIは、TailwindCSSのUIライブラリです。
つまり、
プロジェクトのパッケージマネージャーが入っていないためエラーになっているようです。
私は普段yarnを使用していたのでyarnをインストールしました。
$ docker compose run --rm web(サービス名) yarn install
インストール後、docker compose upでコンテナ作成し、
無事railsの開発環境が起動!
原因
今回の問題は1つではなく、以下が連鎖していました:
- Dockerの権限不整合
- Docker仮想ディスク(Docker.raw)の破損
- node_modules未インストール
学び
Docker.rawが壊れたら修復はほぼ難しそう
→ 修復も考えたのですが、開発環境のデータは消しても問題なかったので初期化を選択しました。初期化が最短なようです。
Docker初期化するとnode_modulesも消える
→ パッケージマネージャをインストールするのを忘れないようにして下さい。
おわりに
sudoコマンドのような権限系のコマンドを初めて使いましたが、もしかすると最初からdocker.rawファイルを削除していたらコマンドを実行しなくてよかった気がします。
この記事はプログラミング初心者が書いた記事になります。
間違いがございましたらご連絡いただけますと幸いです。