Docker

【Docker】Dockerで不具合が出た場合に僕がとりあえず試していることリスト

Docker

 

今回はDockerでよく分からない不具合が出た場合に、僕がとりあえず試していることについてまとめたので紹介したいと思います。色々試行錯誤したけどどうにもならないといった場合はぜひ試してみてください。

大前提として何かしらのエラーが出た場合、まずはそのエラーでググり解決を模索してください。この記事はそれでも解決しなかった方向けです。

とりあえず試していることリスト

  1. コンテナの再起動
  2. キャッシュを使用しないビルド
  3. コンテナの削除
  4. コンテナの最新化
  5. <none>:<none>なイメージの削除
  6. Dockerイメージをクリーンに
  7. Docker for Macの再起動
  8. PCの再起動

イメージを先に削除してもどのコンテナに紐づいているイメージか分からないので、「まずはコンテナ削除、その後イメージ削除」という順番を意識するようにしましょう。

コンテナの再起動

「コンテナは起動しているけど、何か変な現象起きてる」といった場合は、とりあえずコンテナを再起動してみます。

% docker-compose up

キャッシュを使用しないビルド

次に試すことはキャッシュを使用しないビルド。Dockerfileを更新した場合など、イメージの構築にキャッシュを使用したくない場合に用いるコマンドです。

% docker-compose build --no-cache
通常のビルドより時間がかかります。

コンテナの削除

これでもダメならコンテナを一度削除してみましょう。

% docker rm `docker ps -a -q`

上記コマンドはコンテナを一括で削除するコマンドです。

もし全て削除したくない場合は「% docker ps -a」で停止しているコンテナを表示し「% docker rm 削除したいコンテナID」で削除しましょう。

例), % docker rm efnwdjkfwf823

// 複数指定も可能
例), docker rm eea5bsds02 52008asdfqd

コンテナの最新化

削除しても変わらなければ、コンテナの最新化を行います。(個人的によくやります)

% docker-compose stop
% docker-compose rm --force
% docker-compose build
% docker images | awk '/<none/{print $3}' | xargs docker rmi
% docker-compose up

<none>:<none>なイメージの削除

続いて試すことは<none>:<none>なイメージです。ビルドを複数回行うと、<none>:<none>なイメージが生成され容量を圧迫してしまうため、それらをとりあえずクリーンにします。

% docker images 
% docker images | awk '/<none/{print $3}' | xargs docker rmi

参考: Dockerに<none>:<none>なイメージが生まれてくる理由

Dockerイメージをクリーンに

<none>:<none>なイメージを削除しても変わらなければ、イメージ全てをクリーンにします。イメージはそれに紐づく中間ファイルの削除も行わなければならないため、-fオプションが必要な点に注意しましょう。

% docker images
% docker rmi -f イメージID

例), docker rmi -f cdc2ab81113 

Docker for Macの再起動

Docker for Macを使用している方のみですが、Docker for Macの再起動も有効な手段です。僕もこれで何度か救われたことがあります。

Docker for Macの再起動

PCの再起動

最終手段のPC再起動。これでダメなら誰かにヘルプ出しましょう。

試していることまとめ

  • コンテナの再起動
  • キャッシュを使用しないビルド
  • コンテナの削除
  • コンテナの最新化
  • <none>:<none>なイメージの削除
  • Dockerイメージをクリーンに
  • Docker for Macの再起動
  • PCの再起動

参考

 

 

今回はDockerでよく分からない不具合が出た場合に、僕がとりあえず試していることについて紹介しました。他にもこんなの試しているよ!といった意見があればぜひコメントお願いします。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です