web-dev-qa-db-ja.com

デーモンの実行中に「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 info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

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

ここで何が問題になるのでしょうか?

33
l0b0

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

37
l0b0

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

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

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

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

dockerroot on 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グループに属している必要があります。)

41
basic6

Sudo usermod -aG docker [username]

次に、ログアウトしてから再度ログインします

3
user2167582

Dockerエンジンを次のように起動した場合:Sudo service docker start

「docker」グループに自分を追加しても、通常のユーザーとは接続できません。

あなたは単にそれを停止することができます:Sudo service docker stop

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

1
Raymond

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

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

Dockerを再起動します。

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

1
Stuart James

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
Ronald Weidner

このコマンドは私のために働きます

Sudo grep dwalsh /etc/sudoers

alias docker="Sudo /usr/bin/docker"

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

1
DarKainSoul

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

_$ 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. Docker sockerとコマンドの権限を修正しました。

    _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_

0
nelaaro

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

  1. まず、docker.sockのdocker-clientに権限が設定されていません。Sudo usermod -aG docker $USERを使用して設定できます

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

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

  4. しかし、それをUnixソケットの代わりにTCPポートで動作させる場合は、dockerdの構成ファイルを変更し、0.0.0.0.2375に設定して、bashの行をそのままにします。存在する場合、または0.0.0.0:2375に設定します。

0
Nilesh Kande