Dockerが起動しない?「-H fd://」やTCP、ソケットエラーの原因と解決方法
Dockerを使おうとした際に、「Dockerが起動しない」というトラブルに遭遇したことはありませんか?
特に「-H fd://」関連のエラーは、原因が分かりにくく戸惑う方も多いでしょう。
この記事では、Dockerが起動しない際のトラブルシュート方法を分かりやすく解説します。以下の手順でエラーを解消し、Dockerを正常に動作させましょう。
よくあるエラーメッセージと原因
まずは、遭遇しがちなエラーメッセージとその原因を確認します。
1. Failed to bind fd://: address already in use
- 原因: ソケット (
/var/run/docker.sock
) が既に他のプロセスで使用されています。
2. Cannot connect to the Docker daemon at unix:///var/run/docker.sock
- 原因: ソケットが無効、またはアクセス権限が不足しています。
3. Error starting daemon: invalid character in daemon.json
- 原因: 設定ファイル
/etc/docker/daemon.json
に構文エラーがあります。
4. Job for docker.service failed because the control process exited with error code
- 原因: Systemdの設定ファイルと
daemon.json
の設定に矛盾があります。
解決手順:エラーの特定と修正
以下のステップで問題を特定し、順番に修正を進めましょう。
ステップ1: Dockerソケットの状態を確認する
Dockerは /var/run/docker.sock
を介して動作します。このソケットが競合している場合、エラーが発生します。
ソケットのステータスを確認
systemctl status docker.socket
- Active: ソケットは正常に動作中です。
- Inactive またはエラー: 以下のコマンドでソケットを有効化します。
systemctl enable docker.socket systemctl start docker.socket
ソケットを使用中のプロセスを確認
sudo lsof /var/run/docker.sock
- 使用中のプロセスがある場合は停止します。
sudo kill <プロセスID>
ステップ2: daemon.json
の設定を確認・修正する
Dockerの設定ファイル /etc/docker/daemon.json
にエラーがあると、デーモンが起動しません。
設定ファイルの確認
cat /etc/docker/daemon.json
正しい設定例
{
"log-level": "warn",
"storage-driver": "overlay2",
"hosts": ["fd://"]
}
構文エラーのチェック
構文エラーがないか以下のコマンドで検証します。
jq . /etc/docker/daemon.json
エラーが表示された場合は、構文を修正してください。
設定の競合を解消
"hosts": ["fd://"]
と"hosts": ["tcp://"]
のように複数の指定がある場合、必要なものだけを残します。
ステップ3: Systemdユニットファイルを確認する
-H fd://
を使う場合、Systemdの設定が正しい必要があります。
設定ファイルの確認
cat /lib/systemd/system/docker.service
以下のように設定されていることを確認します。
[Service]
ExecStart=/usr/bin/dockerd -H fd://
設定の修正方法
sudo systemctl edit docker
編集内容例:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd://
設定の反映と再起動
sudo systemctl daemon-reload
sudo systemctl restart docker
ステップ4: エラーログを確認する
トラブルシュートが難航する場合は、ログから原因を探ります。
ログ確認コマンド
journalctl -u docker.service
主なエラー例と解決方法
- “Address already in use”: ソケットを使用中のプロセスを停止します。
- “Invalid JSON”:
daemon.json
を修正して再起動します。 - “Cannot connect to Docker daemon”:
docker.socket
を有効化し、権限を確認します。
スポンサーリンク
よくある質問 (FAQ)
Q1: docker.sock
を削除しても大丈夫ですか?
問題ありません。ソケットは再起動時に再生成されます。
sudo rm /var/run/docker.sock
sudo systemctl restart docker
Q2: fd://
を使わずに起動するには?
fd://
の代わりに unix:///var/run/docker.sock
を指定できます。
{
"hosts": ["unix:///var/run/docker.sock"]
}
まとめ
Dockerが起動しない原因は主に以下の3つに分類されます:
- ソケットの競合や無効化
- 設定ファイル (
daemon.json
) の構文エラーや競合 - Systemdユニットファイルとの不整合
これらを順にチェックすることで、ほとんどの問題は解決可能です。解決が難しい場合はエラーログを基に追加の調査を行いましょう。
スポンサーリンク
参考情報
Dockerトラブルで困った際には、本記事を参考に解決を目指してください!