Dockerで「Connection refused」エラーが発生する原因と解決方法
問題の概要
docker-compose up
コマンドを実行した際に、以下のエラーが発生することがあります:
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', ConnectionRefusedError(61, 'Connection refused'))
このエラーは、DockerクライアントがDockerデーモン(サーバー)に接続できないことを示しています。この問題はさまざまな環境(Linux、macOS、WSL)で発生する可能性があります。
主な原因と解決策
1. Dockerデーモンが起動していない
Dockerエンジンが実行されていない場合、このエラーが発生します。
# Dockerサービスの状態を確認
systemctl status docker
# Dockerサービスを開始(Linux systemd使用時)
sudo systemctl start docker
# システム起動時に自動起動するように設定
sudo systemctl enable docker
INFO
macOSの場合は、Docker Desktopアプリケーションが起動しているか確認してください。
2. ユーザー権限の問題
現在のユーザーがdockerグループに属していない場合、権限不足で接続エラーが発生します。
# dockerグループが存在しない場合は作成
sudo groupadd docker
# 現在のユーザーをdockerグループに追加
sudo usermod -aG docker $USER
# グループ変更を反映するためにログインし直すか、以下のコマンドを実行
newgrp docker
WARNING
変更を有効にするためには、一度ログアウトして再ログインするか、新しいシェルセッションを開始する必要があります。
3. Dockerソケットの権限設定
Dockerソケットファイルの権限が適切に設定されていない場合もあります。
# Dockerソケットに読み書き権限を付与
sudo chmod o+rw /var/run/docker.sock
# またはより安全な方法(ユーザーをdockerグループに追加することを推奨)
sudo chmod 666 /var/run/docker.sock
注意
chmod 666
はセキュリティリスクがあるため、ユーザーをdockerグループに追加する方法を優先してください。
4. WSL(Windows Subsystem for Linux)環境での設定
WSLを使用している場合、Docker Desktopの設定が必要です。
- Docker Desktopを開く
- Settings → Resources → WSL Integration に移動
- 「Enable integration with my default WSL distro」を有効化
- 使用するWSLディストリビューションを選択
- Apply & Restartをクリック
5. Dockerコンテキストの確認
Dockerのコンテキストが正しく設定されているか確認します。
# 現在のコンテキストを確認
docker context ls
# デフォルトコンテキストに切り替え
docker context use default
6. 環境変数の確認
Dockerの環境変数が正しく設定されているか確認します。
# 環境変数を再読み込み
source ~/.bashrc
# または
source ~/.zshrc
トラブルシューティングの手順
以下のフローチャートで問題解決の手順を確認できます:
環境別の注意点
Linux環境
- systemdを使用している場合、サービスの起動状態を確認
- ユーザーグループの変更後は再ログインが必要
macOS環境
- Docker Desktopアプリケーションが起動しているか確認
- 場合によっては再起動が必要
WSL環境
- Docker DesktopのWSL連携設定を有効化
- カーネル更新が必要な場合があります
まとめ
Docker接続エラーは主に以下の原因で発生します:
- Dockerデーモンが起動していない
- ユーザー権限が不足している
- ソケットファイルの権限設定の問題
- WSL環境での設定不足
これらの問題を順番に確認することで、ほとんどの場合で解決できます。権限設定に関してはセキュリティリスクを考慮し、可能な限り安全な方法(ユーザーをdockerグループに追加する)を選択してください。