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


29

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 info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

デフォルトのDocker構成を実行しています。つまり、/etcこのサービスに関連するファイルは変更していません。

ここで何が問題になりますか?

回答:


36

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


1
誤解を招くことはありません。それはできなかったドッキングウィンドウデーモンに接続します。「デーモンは実行中ですか?」単なる推測でした。
ブラッチリー

2
sudo gpasswd-
アレックス

1
sudo gpasswd -a $ USERドッカー#任意のユーザー名で動作します
priomsrb

私はこれをやったが、まだ機能しなかった。実行するとsudo systemctl start docker修正され、デーモンは実際には実行されませんでした...
nakamin

32

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

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ソケットはrootによって所有されます:

# 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?

これが、多くの人が単にを使用してすべてのDockerコマンドをrootとして起動する理由sudoです。ただし、他の回答で説明したように、Dockerには独自のメカニズムがあるため、sudoを使用する必要はありません。

理想的には、dockerDockerのインストール時にというグループが作成されます。ただし、デーモンの起動時にそのグループが存在しない場合、ソケットファイルはルートによって所有されます。

場合によっては、そのグループdockerrootはFedoraのよう異なる名前を使用していました。grep 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。信頼できるユーザーのみがグループに参加する必要があります。)


1
これは元の質問に答えていないようです。
-l0b0

4
@ l0b0:さて、私はこれが誰かに役立つことを期待して、なぜこれが起こっているのか説明したかった。ユーザーをグループに追加するusermodコマンドは、回答の中央部分に隠されています。この回答が役に立たない場合は、削除できるようお知らせください。
-basic6

4
はい、Archのソリューションに答えて説明します。
-kodeart

私はこれをすべて行いましたが、OPが言及した問題にまだ遭遇しています。権限に関連する手順はどれも問題を解決していません。
mopsyd

3

sudo usermod -aG docker [ユーザー名]

ログアウトしてからログインし直します


1

私のLinuxシステムでこの問題を解決するためにいくつかの研究を行った後、私はこの答えを書くと思った。ここに私が問題を解決するためにしたことを示します。

Fedora 22で

Dockerのインストール:

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

Dockerのインストール後:

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

$> sudo usermod -aG docker

Dockerデーモンを開始する必要があります

$> sudo service docker start

ブート時に起動するようにデーモンを設定できます

$> sudo chkconfig docker on

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

$> service docker status

そして最後の最後のチェック

$> docker run hello-world

+1は完全な例ですが、これらのコマンドの多くは私の状況には適用できません(+の代わりにpacmanを使用してインストールします)。systemctlservicechkconfig
l0b0

1

Fedora 23またはRedhatバリアントを使用/etc/sysconfig/dockerしている場合は、以下を編集および変更します

OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'

ドッカーを再起動します。

このグループをシステムに追加し、自分自身をグループに追加してください。



1

sudo service docker startでdocker engineを起動した場合

「ドッカー」グループに自分を追加した場合でも、通常のユーザーと接続することはできません。

停止するには、sudo service docker stopを使用します。

通常のユーザーとして起動します:service docker start


docker group今までユーザーを追加する必要はありませんでした。sudo service start私のために働いた。しかし、新しいものがあるかどうかを観察します。
stupidnetizen

0

私も同じ問題を抱えていました。問題は、docker-daemonおよびdocker-clientに割り当てられたソケットにありました。

  1. 最初に、docker.sockのdocker-clientにアクセス許可が設定されていませんでした。 sudo usermod -aG docker $USER

  2. 次に、docker-clientが実行されているbashファイルを確認します。私にとっては、0.0.0.0:2375に設定されていましたが、docker-daemonはUNIXソケットで実行されていました。(dockerdの構成ファイルで設定されました)。

  3. 問題のある行をコメントアウトするだけで、問題なく機能します。

  4. しかし、unixソケットではなくTCPポートで動作させたい場合は、dockerdの構成ファイルを変更し、0.0.0.0.2375に設定し、bashの行をそのままにしておくか、0.0に設定します。 0.0:2375。


0

これらは、次を修正するために私が従った手順です

$ docker info
Cannot connect to the Docker daemon at 
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
  1. 自己をdockerグループに追加します

    usermod -aG docker $USER

  2. ドッカーソッカーとコマンドの権限を修正します。

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

    $ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*

    $ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock

  3. dockerコマンドの構成環境に変数を追加します

    export DOCKER_HOST=unix:///var/run/docker.sock

  4. Rest Docker

    sudo systemctl restart docker

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.