DockerでCouldn't connect to Docker daemonが出る場合の原因と解決方法
はじめに
Dockerをいざ使おうとした時に、Dockerのコマンド実行時にERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
というエラーが表示されました。この記事ではこのエラーの原因と解決方法をまとめます。
エラーの内容
DockerとDocker Composeをインストールし、いざDockerとDocker Composeを使おうとコマンドを実行したところ、以下のようなエラーが表示されました。
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
上記はRails環境を構築しようとした際に使ったDocker Compoesのコマンドですが、他のDockerコマンドやdocker-compose
に続く内容に関わらず表示されるエラーです。
Couldn't connect to Docker daemonの原因
これは、「Dockerデーモンに接続できなかった」という内容で、Dockerの使用権限がデフォルトではroot
のみに与えられており、root
権限を持たない通常ユーザでDockerのコマンドを実行したことが原因です。なぜデフォルトではroot
にのみ使用権限が与えられているかというと、DockerではUnixソケットを使用しますが、このUnixソケットの使用権限がroot
にしか付与されていません。
そのため、Docker、Docker Composeは実行時にroot
権限が必要となります。
したがって、解決方法は以下の2つが考えられます。
sudo
を使うdocker
グループを作成して、そこに通常ユーザを加える
上記2つについてそれぞれ説明します。
sudoを使う
これは簡単で、具体的には以下のようにsudo
を付けて実行すれば解決です。
$ sudo docker-compose run web rails new . --force --database=mysql --skip-bundle
毎回sudo
を使うのが面倒な場合は、2番目の解決策が参考になると思います。
dockerグループを作成して、そこに通常ユーザを加える
docker
という名前のグループを作成し、そこに通常ユーザを追加します。
dockerグループを確認、作成する
環境によってはすでにdocker
グループが作成されている場合もありますので、以下のコマンドで一度グループ一覧を確認してみます。
$ cat /etc/group | grep docker
docker:x:999:
私の環境では、DockerとDocker Compoesをインストールした時点で上記のようにすでにdocker
グループが作成されていました。
もし、上記コマンド結果に何も出力されない場合は、以下でdocker
グループを作成します。
$ sudo groupadd docker
通常ユーザをdockerグループに追加する
続いて以下のコマンドで通常ユーザをdockerグループに追加します。
$ sudo usermod -aG docker $USER
上記の$USER
は、環境変数で現在ログイン中の通常ユーザのユーザ名です。
上記を実行後、以下で通常ユーザが属するグループを確認してみると、docker
グループが所属するグループとして含まれていることを確認できます。tarou
というのが通常ユーザです。
$ groups $USER
tarou : tarou adm cdrom sudo dip plugdev lpadmin sambashare kvm libvirt docker
グループの追加を反映させるには、ログインし直す必要があるので、一度ログアウトして再ログインしてください。
後は以下のようにsudo
なしでもDocker、Docker Composeを使用できるようになります。
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
WARNINGが出る場合
もし上記のdocker
グループに追加する対策をする前に、sudo
を実行してDockerコマンドを実行した場合は、ホームディレクトリ直下に.docker
というディレクトリが作成されています。このディレクトリが残った状態で上記のdocker
グループに追加する対策をした後に、sudo
なしでDockerのコマンドを実行すると以下のような警告が出る場合があります。
WARNING: Error loading config file: /home/tarou/.docker/config.json -
stat /home/tarou/.docker/config.json: permission denied
これは、作成された.docker
ディレクトリのパーミッションがroot権限になってしまっているために出る警告です。これを解決するには、一度.docker
ディレクトリを削除します。.docker
は、削除してもDockerコマンド実行時に自動で再作成されます。
もしくは、以下のようにroot権限から通常ユーザに権限を付与してももちろん大丈夫です。
$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
参考文献
以下の公式ドキュメントにしっかりと書いてありました。
This section contains optional procedures for configuring Linux hosts to work better with Docker. Manage Docker as a non-root user The Docker daemon binds to a Unix socket instead of...
まとめ
Dockerを使い始めた時に遭遇しやすいエラーだと思います。同じようなエラーに遭遇している方の参考になれば幸いです。
関連記事
- 公開日:2020/01/01 更新日:2020/01/01
Docker ComposeをUbuntuにインストールする手順
Docker ComposeをUbuntu18.04にインストールしたのでその手順をメモしておきます。docker-composeコマンドを使えるようにするまでの手順です。Docker Composeのインストール自体はとても簡単です。
- 公開日:2018/08/20 更新日:2018/08/20
NextcloudをDockerで構築する手順
プライベートなDropbox環境を構築することができるOwnCloudですが、OwnCloudから派生したNextcloudが開発されています。 このNextcloudを実際に触って使ってみるために、Dockerを使って環境構築したのでその手順をメモします。
- 公開日:2018/08/14 更新日:2018/08/14
Dockerのコンテナとホストで共有フォルダを設定する手順
- 公開日:2018/06/09 更新日:2018/06/09
Ubuntu18.04にDockerをインストールする手順
はじめはわかりにくいDockerですが、とりあえず手を動かして実際に使ってみると、その良さが次第にわかります。私自身、最初は良くわからないまま使い始めましたが、その便利さを使っているうちに実感できました。そこでここではUbuntu18.04にDockerをインストールする手順をメモします。