• 投稿者:
  • 投稿コメント:0件のコメント
  • 投稿カテゴリー:OS
  • 投稿の最終変更日:2024年12月11日

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つに分類されます:

  1. ソケットの競合や無効化
  2. 設定ファイル (daemon.json) の構文エラーや競合
  3. Systemdユニットファイルとの不整合

これらを順にチェックすることで、ほとんどの問題は解決可能です。解決が難しい場合はエラーログを基に追加の調査を行いましょう。


スポンサーリンク

参考情報

Dockerトラブルで困った際には、本記事を参考に解決を目指してください!

コメントを残す