晴耕雨読

working in the fields on fine days and reading books on rainy days

[Docker] compose up時のエラー「Couldn't connect to Docker daemon at http+docker://localhost - is it running?」の対処法

docker-compose up を実行した際に systemctl status docker でデーモンは動いているのに接続できない際の対処法について説明します。

Couldn't connect to Docker daemon at http+docker://localhost - is it running?

原因

dockerコマンドは管理者権限 (sudo) で実行する必要があるためです。

対処法

sudo を付けて実行するか、実行ユーザを docker グループに所属させてから docker コマンドを実行する必要があります。 以下では jenkins ユーザを docker グループに所属してから実行する例です。

dockerグループが存在するか確認します。

$ cat /etc/group | grep docker
docker:x:999:

jenkinsユーザをdockerグループに所属させます。

$ sudo usermod -aG docker jenkins

SSHで接続中のユーザの場合は再度SSH接続し、デーモンが使用するユーザの場合はサービス再起動します。 その後で、id で正しくグループに所属されたことを確認します。

$ id jenkins
uid=108(jenkins) gid=112(jenkins) groups=112(jenkins),999(docker)

dockerグループに所属していれば sudo なしで実行できるようになります。

$ docker-compose up -d

注意点

ユーザを docker グループに所属させた場合、そのユーザはOSの管理者権限を得ることができます。 詳細は DockerやLXDを利用した権限昇格 をご確認ください。

以上です。

参考文献