はじめに
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
参考文献
以下の公式ドキュメントにしっかりと書いてありました。
Post-installation steps for Linux
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を使い始めた時に遭遇しやすいエラーだと思います。同じようなエラーに遭遇している方の参考になれば幸いです。
SPONSORED LINK
2 thoughts on “DockerでCouldn’t connect to Docker daemonが出る場合の原因と解決方法”