デーモンが実行中に「Dockerデーモンに接続できません」というメッセージが表示されるのはなぜですか?

デーモンが実行中に「Dockerデーモンに接続できません」というメッセージが表示されるのはなぜですか?

Dockerサービスは明らかに実行中です。

$ systemctl status docker.service 
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
     Docs: https://docs.docker.com
 Main PID: 1015 (docker)
   CGroup: /system.slice/docker.service
           └─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root      1015  0.0  0.3 477048 12432 ?        Ssl   2015   2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs

しかし、Docker自体はDockerとの会話を拒否します。

$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

私は走っている基本ドッカーの設定/etcつまり、このサービスに関連するファイルを変更していません。

ここで何が間違っている可能性がありますか?

答え1

この質問はすでに回答されていますが、ここに追加情報があります。

Arch を使用しても Fedora や Ubuntu などの他のディストリビューションを使用しても、Docker はソケットファイルを使用して通信します。コマンドを実行すると、dockerこのソケットを使用してDockerデーモンと通信します。もちろん、デーモンは実行中でなければなりませんが(通常はデフォルトでは無効になっています)、ユーザーがソケットにアクセスできない場合はデーモンとも通信できません。

まず、デプロイメントリポジトリからDockerをインストールする必要があります。インストールスクリプトをダウンロードしてシェル(curl ... | sh)にパイプする人もいますが、簡単に更新できるようにリポジトリからインストールすることをお勧めします。

アーチ:

# pacman -S docker

Fedora:

# dnf install docker

上記のように、デーモンはデフォルトで無効になっている可能性があります。 Dockerを使用するには、デーモンが実行されている必要があります。

有効にします(起動時に起動します)。

# systemctl enable docker

今すぐ起動(または再起動):

# systemctl start docker

Dockerソケットはデフォルトでルートが所有します(dockerグループがない場合)。

# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock

これが一般ユーザーがdockerデーモンと会話できない理由です。一般ユーザーにはソケットにアクセスする権限がありません。デーモンにアクセスできないため、デーモンが実行されていないとし、次のエラーを表示します。Cannot connect to the Docker daemon. Is the docker daemon running on this host?

これは多くの人がsudo

docker理想的には、Dockerをインストールすると、名前付きグループが作成されます。ただし、デーモンの起動時にグループが存在しない場合、ソケットファイルはルートが所有します。

場合によっては、グループが別の名前を持っていたことがありました。dockerrootFedoragrep docker /etc/groupシステムにそのようなグループがあることを確認してください。すでにこのグループを使用している場合(ユーザーがグループに属している場合)、これを使用するようにDockerを設定する必要があります。

/etc/sysconfig/docker以下を追加します-G dockerroot(注:これは回避策であり、最善の解決策ではありません)。

OPTIONS='--selinux-enabled -G dockerroot'

デーモンを再起動すると、ユーザーはソケットにアクセスできます。

# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock

それ以外の場合、正式な方法は名前付きグループを使用することですdocker。存在する場合、Dockerはそれを自動的に使用します。つまり、ソケットグループをこのグループに設定します。存在しない場合は、それを作成してデーモンを再起動するだけです。

# groupadd docker
# systemctl restart docker

ソケットファイルは次のグループが所有します。

# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock

dockerソケットにアクセスするには、ユーザーがこのグループに属している必要があります。

# usermod -aG docker (user)

グループにいることを確認するには、ログアウトして再度ログイン(またはsu - (user)実行)する必要があるかもしれません。id

その後、sudo / rootなしでDockerを使用できます。

$ docker version --format '{{.Server.Version}}'
1.9.1

最後に警告の申し上げます。信頼できるユーザーだけがDockerデーモンを制御できる必要があります。。バラよりhttps://docs.docker.com/engine/security/security/
(もちろんsudoも同じです。信頼できるユーザーだけがグループに属しているwheel必要があります。)

答え2

あなたはする必要がありますdockerグループに自分を追加するコマンドをnewgrp docker実行するには、ログアウトして再度ログインするか、を実行してグループをアクティブにします。dockerエラーメッセージは単に誤解を招く。

答え3

私のLinuxシステムでこの問題を解決するために調査した後、この答えを書く必要があると思いました。問題を解決するために私がしたことは次のとおりです。

Fedora 22から

ドッカーをインストールします。

$> curl -fsSL https://get.docker.com/ | sh

Dockerをインストールした後:

ユーザーをdockerグループに追加する必要があります。

$> sudo usermod -aG docker

ドッカーデーモンを起動する必要があります

$> sudo service docker start

起動時にデーモンが起動するように設定できます。

$> sudo chkconfig docker on

dockerサービスが実行されていることを確認できます。

$> service docker status

最後の確認

$> docker run hello-world

答え4

このコマンドは私にとって効果的でした。

sudo grep dwalsh /etc/sudoers

alias docker="sudo /usr/bin/docker"

さらにドキュメントが必要な場合は、このページで解決策を見つけました。 root以外のユーザーがCentOS、Fedora、またはRHELでDockerを実行することを許可しない理由

関連情報