Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

Linuxで「Dockerデーモンに接続できません」エラーを解決する3つの方法

Linuxターミナルで「Cannot connect to the Docker daemon(Dockerデーモンに接続できません)」というエラーが表示されると、多くの方は戸惑うでしょう。実際にはDockerデーモンはすでに起動しているのに、このエラーが出るからです。サービスが起動していないこと自体が原因ではないケースも多く、このエラーの主な原因は、ユーザーがdockerグループに追加されていないことにあります。

DockerはLinuxシステム上で専用のユーザーグループを作成します。このグループに所属していないユーザーアカウントは、Dockerデーモンに接続できません。ただし注意が必要なのは、dockerグループへの追加は実質的にroot権限と同等になるという点です。デーモンは常にrootユーザーとして動作しているためです。単一ユーザーのUbuntu Server環境では許容できるかもしれませんが、Arch、Fedora、DebianなどでDockerを運用する場合は、この点を十分に理解しておく必要があります。

方法1:Dockerサービスの状態を確認する

まず、Dockerサービスが現在稼働中かどうかを確認しましょう。ターミナルで以下のコマンドを一般ユーザーとして実行します。

systemctl status docker.service

Dockerデーモンに割り当てられたPID番号などの情報が表示されるはずです。何も表示されない場合は、サービスを再起動する必要があります。

サービスを再起動したら、エラーが発生していた操作をもう一度試してみてください。正常に動作すれば、単にサービスが起動していなかっただけなので、なぜ停止していたのかを確認すれば問題ありません。しかし残念ながら、この方法で解決するケースは少数派です。解決しない場合は、次の方法に進みましょう。

方法2:ユーザーをdockerグループに追加する

コマンドラインからdocker infoを実行します。通常、ここでも「Cannot connect to the Docker daemon」エラーが再び表示されます。

その場合は、以下のコマンドを実行して自分自身をdockerグループに追加します。

sudo groupadd docker; sudo usermod -aG docker $USER

usermodが存在せずエラーになる場合は、代わりに次のコマンドを使用してください。

sudo groupadd docker; sudo gpasswd -a $USER docker

ただし、主要な商用Linuxディストリビューションの多くは共通のツールセットを採用しているため、usermodが存在しないことはまずありません。いずれの場合も、まだdockerグループにログインしていない場合はnewgrp dockerを実行して、新しいグループに切り替えます。

このコマンドは常に「現在ログインしているユーザー」を追加します。一般ユーザーとrootアカウントしかないシステムでは大きな問題にはならないでしょう。管理者権限を使っている間に、以下のコマンドも実行して、dockerソケットとコマンドのパーミッションを修正しておきましょう。

sudo chgrp docker /usr/bin/docker; sudo chgrp docker /var/run/docker.sock

通常、ソケットファイルはrootユーザーのみが所有しているため、この操作によって所有グループが先ほど作成したdockerグループに変更され、権限の問題が解消されます。

その後、sudoなしでdockerコマンドが使えるかテストしましょう。一般ユーザーとして以下を実行し、他のエラーが発生しないことを確認します。

docker run hello-world

ここまでの手順で、ほとんどのユーザーのエラーは解消されているはずです。それでも問題が残る場合は、一度完全にログアウトしてみてください。別のターミナルエミュレータウィンドウを開いて試すのも有効ですが、それでも改善しない場合は、可能であればシステムを完全に再起動すると解決することがあります。

方法3:ACLでDockerソケットの権限を管理する

root権限と同等になるグループに所属したくない場合は、ACL(Access Control List)を使って、特定のユーザーだけがソケットファイルにアクセスできるよう設定できます。この方法を選ぶ場合は、gpasswdによるグループ追加の手順は不要です。

セキュリティ監査の観点では、ファイルシステム全体からACLエントリを洗い出す作業が負担になるというデメリットがありますが、dockerグループを一切使わずに済むのが大きな利点です。

この方法を採る場合は、以下のコマンドを実行します。「name」の部分は実際のユーザー名に置き換えてください。

sudo setfacl -m user:name:rw /var/run/docker.sock

これにより、/var/run/docker.sockにあるDockerソケットへのアクセス権限が付与されます。DebianやUbuntu Serverで動作することを確認済みです。


著者について

Linuxで「Dockerデーモンに接続できません」エラーを解決する3つの方法

Kevin Arrows(ケビン・アローズ)

Kevin Arrowsは、10年以上の業界経験を持つ高度な技術力を備えたテクノロジースペシャリストです。Microsoft Certified Technology Specialist(MCTS)の資格を保有し、最新の技術動向を追い続けることに強い情熱を持っています。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど、幅広い技術分野について数多くの記事を執筆しており、複雑な技術的概念を明快かつ簡潔に説明する能力で同業者から高い評価を得ています。

  1. 2024年版:常に最新を追い求める最先端Linuxディストリビューション5選

    Linuxは非常に保守的なイメージを持たれがちです。その一因として、新しいハードウェアが発売されてもすぐに対応しない点が挙げられます。しかし、これはLinux側だけの問題ではなく、ハードウェアベンダーがオープンソースコミュニティに製品の仕様を開示しないことに大きく起因しています。それでもなお、常に最新のFOSS(フリー・オープンソースソフトウェア)を提供し続ける最先端のディストリビューションは確かに存在します。 常に最新のソフトウェア環境を手に入れたいなら、次にオープンソースのワークステーションを構築する際に、以下のディストリビューションの導入を検討してみてはいかがでしょうか。 Arch Li

  2. 【解決方法】「add-apt-repository: コマンドが見つかりません」エラーの直し方

    Debian、Ubuntu、Linux MintなどのUbuntu系ディストリビューションを使用していると、PPA(Personal Package Archive)やその他のリポジトリをaptソースに追加しようとした際に、「add-apt-repository: コマンドが見つかりません」というエラーが表示されることがあります。このエラーは、必要なパッケージがシステムにインストールされていないことが主な原因です。 APTとsoftware-properties-commonパッケージとは? APT(Advanced Package Tool)は、Debian向けに開発されたパッケージ管理シス