一般的な Docker の問題のトラブルシューティング
適切にインストールされた Docker 環境であっても、通常の使用中に問題に遭遇することがあります。一般的な Docker の問題とその解決策をいくつか見てみましょう。
問題:Docker デーモンが実行されていない
前のステップですでに Docker サービスを起動している場合は、このステップをスキップできます。
Docker コマンドを実行しようとして、次のようなエラーが表示された場合:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
これは、Docker デーモンが実行されていないことを意味します。この問題を解決するには:
- Docker サービスの状態を確認します。
sudo systemctl status docker
- 実行されていない場合は、起動します。
sudo systemctl start docker
- サービスが起動できない場合は、エラーログを確認します。
sudo journalctl -u docker
この問題とその解決策をシミュレートしてみましょう。
## まず、問題をシミュレートするために Docker サービスを停止します
sudo systemctl stop docker
## Docker コマンドを実行してみます
docker ps
## 「Cannot connect」エラーが表示されます
## サービスを再起動して問題を解決します
sudo systemctl start docker
## Docker が再び動作していることを確認します
docker ps
問題:アクセス権が拒否される
次のようなエラーが表示された場合:
Got permission denied while trying to connect to the Docker daemon socket
これは通常、ユーザーに Docker ソケットにアクセスする権限がないことを意味します。解決策は、ユーザーを docker グループに追加することです。
sudo usermod -aG docker $USER
このコマンドを実行した後、通常は変更を有効にするためにログアウトして再ログインする必要があります。ただし、ここでは labex
ユーザーがすでに適切な権限を持っている実験環境なので、この手順は必要ありません。
問題:ディスク容量の問題
Docker は、未使用のイメージ、コンテナ、ボリュームによって時間の経過とともに大量のディスク容量を消費することがあります。システムのディスク容量が不足している場合:
- Docker のディスク使用量を確認します。
docker system df
- 未使用のリソースを削除します。
## すべての停止したコンテナを削除します
docker container prune
## すべての未使用のイメージを削除します
docker image prune
## すべての未使用のボリュームを削除します
docker volume prune
## または、1 つのコマンドですべての未使用のものを削除します
docker system prune
削除コマンドをデモンストレーションしてみましょう。
## すぐに終了するコンテナをいくつか作成します
docker run hello-world
docker run ubuntu echo "This will exit immediately"
## 停止したコンテナを削除します
docker container prune
操作を確認するように求められます。
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
y
と入力して確認します。削除されたコンテナを示す出力が表示されるはずです。
問題:コンテナが起動しない
コンテナが起動できない場合は、ログを確認して調査することができます。
## まず、起動に失敗する可能性のあるコンテナを起動してみます
docker run --name failing-container ubuntu apt-get update
## ログを確認します
docker logs failing-container
ログには、コンテナが失敗した原因を示すエラーが表示されることがあります。
問題:ネットワークの問題
コンテナが互いに通信できない、または外部と通信できない場合:
- Docker のネットワーク構成を確認します。
docker network ls
- 特定のネットワークを調査します。
docker network inspect bridge
- コンテナ内から接続性をテストします。
## ネットワーク機能を持つコンテナを起動します
docker run -it ubuntu bash
## コンテナ内から、ping をインストールします
apt-get update && apt-get install -y iputils-ping
## ウェブサイトに ping を送信してみます
ping google.com
## コンテナを終了します
exit
Docker のログとデバッグ
一般的な Docker のトラブルシューティングでは、Docker デーモンのログを確認すると役立つことがあります。
sudo journalctl -u docker
特定のコンテナのログを確認するには:
docker logs <container_id>
ログをリアルタイムでストリーミングすることもできます。
docker logs -f <container_id>
これらのトラブルシューティング手法を使えば、一般的な Docker の問題の多くを診断して解決することができます。