DockerコマンドはDockerデーモンに接続できません


246

Dockerに移行したいので、いじり始めました。VirtualBox Ubuntu 15.10(Wily Werewolf)のインストールにDockerをインストールしました。ここで提案されているように、基本的なnginx Dockerイメージを実行してみました。

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

そこで、Dockerが実行されているかどうかを確認しました。

$ sudo service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           └─7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

これは、Dockerデーモンが実際に既に実行されていることを示していますが、Dockerデーモンを手動で開始したことを確認します。

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0

次に、イメージをもう一度実行してみましたが、結果は同じです。

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

コマンドをsudoしてみましたが、役に立ちませんでした。ここで何が悪いのですか?


1
同じ問題。私もUbuntu 15.10に参加しています:(
Daniel Loureiro、2015年

1
同じ問題、ubuntu 15.10
Lucas Tettamanti 2015年

1
Dockerサービスを再起動するだけです。@jim <pre> sudo service docker restart </ pre>に感謝します
Nasruddin

1
ナスルディン、確かに私にはうまくいかなかった... :-(
Rafael_Espericueta

1
私はそれを動作させるためにマシンを再起動する必要がありました。
ロマロマ

回答:


443

次のように、現在のユーザーをdockerグループに追加する必要があります。

sudo usermod -aG docker $(whoami)

次に、ログアウトしてシステムに再度ログインするか、システムを再起動します。によるテストdocker version

詳細については、docker-engineのインストール方法に従ってください ドッカーのドキュメントに


ばかげていますが、@ RobinLoxleyでも私にとってはうまくいきました。これは単なるコメントではなく、実際の答えになるはずです。投稿する場合はお知らせください。賛成票を差し上げます;)
benka

9
「ログアウトしてシステムに再度ログインするか、システムを再起動する」に下線を付けます
Michele

3
以下の@Junaidの回答は、ログアウト/ログインのステップを回避する方法を示しています。私のように、アプリを再起動したくないので怠惰な場合;)
brandizzi

これはDockerチュートリアルで説明されているとおりですが、ログアウトして再度ログインすることはできませんでした。それを機能させるには、システムを再起動する必要がありました。
aalaap

4
dockerのバージョン情報は表示されますが、出力の最後に表示されますCannot connect to the Docker daemon. Is the docker daemon running on this host?
ghanbari

137

ユーザーをdockerグループに追加する

  • dockerグループが存在しない場合は追加します。

    sudo groupadd docker

  • 接続されているユーザー「$ {USER}」をdockerグループに追加します。

    sudo gpasswd -a ${USER} docker

  • Dockerデーモンを再起動します。

    sudo service docker restart

  • aを実行するnewgrp dockerか、ログアウト/ログインして、グループへの変更を有効にします。


1
newgrp dockerログインセッションではなく、シェルに対してローカルであるようです。これはマニュアルページからはまったく明らかではありません。
bergey 2016年

1
私のために働いた。ありがとう!
アポカイ2016年

うまくいった唯一の答え!プライベートクラウドのLinuxマシン上で動作します。
Meghna Natraj 2017

Ubuntu 18.04で作業しました!ありがとう
Kshitij Saraogi

33

通常、次のコマンドでうまくいきます。

sudo service docker restart

これの代わりに docker start Dockerがすでに実行されているように見える場合の。

それが機能する場合、提案されているように、別の回答とこのGitHubの問題で、自分をdockerグループに追加していない場合は、次のコマンドを実行して実行します。

sudo usermod -aG docker <your-username> 

そして、あなたはおそらく大丈夫です。


他の誰かがこれにぶつかった場合、一部のOSのDockerは、インストールした直後に起動せず、その結果、同じことcan't connect to daemon messageが表示されます。この場合、次のコマンドを実行してdockerサービスのステータスを確認することにより、最初にDockerが実際に実行されていないことを確認できます。

sudo service docker status

出力が次のようになっている場合:docker stop/waiting代わりにdocker start/running, process 15378、Dockerがアクティブではないことは明らかです。この場合、必ず次のようにしてください。

sudo service docker start

そして、前と同じように、あなたはおそらく上手く行くでしょう。


18

自分への注意:dockerコマンドを実行するのを忘れると、質問のタイトルからエラーが発生しますsudo

sudo docker run ...

[Ubuntu 15.10]


12

同じ問題があり、私にとってうまくいったことは
、/ var / run / docker.sockの所有権を確認することでした。

ls -l /var/run/docker.sock

あなたが所有者でない場合は、次のコマンドで所有権を変更してください

sudo chown *your-username* /var/run/docker.sock

次に、先に進んで、Dockerコマンドを簡単に実行してみます。


2
他のすべての可能性を使い果たした後、これがSabayon / Gentoo Linuxで動作するようになった理由です。
gerrit_hoekstra 2017

そのファイルは所有されてrootいますが、dockerグループに属しています。正しいアプローチはにあなたの現在のユーザーを割り当てることですdockerドッカーのマニュアルによると、グループ:sudo groupadd docker && sudo usermod -aG docker $USER
ルーカスブスタマンテ

9

すべてをインストールしてサービスを開始したら、ターミナルを閉じてもう一度開いてから、イメージをプルしてみてください

編集する

私はまたこの問題を抱えていました、上記の解決策が機能しない場合は、以下のコマンドであるこの解決策を試してください

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

考慮事項

上記のコマンドが機能する場合は、おそらくネットワークDockerの問題が発生しています。とにかくこれで問題が解決します。確認するには、次のコマンドを使用してログを参照してください

tail -5f /var/log/upstart/docker.log

出力にそのようなものがある場合

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up

あなたは本当にネットワークの問題を抱えていますが、あなたが次に再起動したとき(更新、2ヶ月は問題なし)あなたのOSかどうかはまだわかりませんがこの問題を再び受け取るか、それがバグまたはインストールの問題であるかは

私のドッカーのバージョン

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

8

Ubuntuにdockerをインストールした後、次のコマンドを実行しました。

sudo service docker start

試しましたか?


6

私も同じ問題を抱えていました。それを解決するために2日間もがきました。

それは私がやったときにのみ機能しました:

  1. Dockerのチュートリアルによると、次を使用してまだ追加されていない場合は、Dockerキーを追加する必要があります。

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. 次に、次のコマンドを使用してdocker権限を自分に付与していることを確認します。

    $ sudo usermod -aG docker $USER

これもお役に立てば幸いです。


2
:ステップ2を簡略化することができるsudo usermod -aG docker $USER
johntellsall

5

root(sudo su)として入力し、これを試してください:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

私はここでも同じ問題を抱えており、dockerコマンドはrootとして実行することでのみ機能し、これでも DOCKER_HOST

PS: Ubuntu にインストールする正しい公式の方法は、その「wget」のことではなく、適切なリポジトリ(15.10でも)を使用することであることに注意してください。


「wgetの」ものは自分のaptソースにドッカリポジトリを置く....つまり、あなたが「正しいと公式の方法」で行う手動に頼まれ、同じこと....
鼻翼

1
アラー、あなたが間違っていると思います。「wget」メソッドは、適切なソースにDockerリポジトリを追加しますが、これはDOCKER_HOST環境変数を設定するなど、他の多くの悪いことも行い、Dockerがそのまま実行されるのを防ぎます。両方のメソッドが両方とも同じであるという理由で、リポジトリにリポジトリーを追加するからではありません。
Daniel Loureiro、2015

5

以下のためのOSX

Dockerを開き、クイックスタートターミナル(https://docs.docker.com/engine/installation/mac/)から「デフォルト」のマシンを起動した後、Dockerコマンドを実行すると、「Cannot connect to docker daemon」というメッセージが表示されます、いくつかの環境変数を設定する必要があることがわかります

eval "$(docker-machine env default)"

次に、それを試してdocker run hello-world、すべてが桃色かどうかを確認します。


5

すでにマシンを再起動しようとした人のために、Docker envドキュメントで指示されているように環境変数DOCKER_HOSTの設定を解除し、残りはすべて、

sudo service docker restart

マシンを再起動した後でも、これだけが私にとってはうまくいきました。


2
これは、ログアウトしてログインするだけの場合に必要です。
Zhang LongQI 16

4

非rootアクセスを与える-dockerから

dockerグループがまだない場合は追加します。

$ sudo groupadd docker

接続しているユーザー「$ {USER}」をdockerグループに追加します。

希望するユーザーと一致するようにユーザー名を変更します。

これを有効にするには、ログアウトして再度ログインする必要がある場合があります。

$ sudo gpasswd -a ${USER} docker

Dockerデーモンを再起動します。

$ sudo service docker restart

3

この質問は現在、Google検索で3位です。Linuxシステムでこの問題を解決するための調査を行った後、この答えを書こうと思いました。元の投稿では、問題はUbuntuにあると述べられていますが、Fedoraを使用しても問題が発生しました。これを念頭に置いて、問題を修正するために私がやったことは次のとおりです。

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

Fedora 23では、このグループはと呼ばれることがありますdockerroot。また、あなたはおそらくリポジトリ(代わりのからそれをインストールするcurl ... | shことが後で更新できるように):dnf install docker
basic6

多くのグループには "docker"がないためgroupadd docker、まず追加してから、ユーザー名に追加する必要がありますsudo usermod -aG docker your_username
TonyTony

2

実行中のコマンドで「sudo」を使用してみてください。


「コマンドをsudoしてみましたが、役に立ちませんでした。ここで私が間違っていることを誰かが知っていますか?すべてのヒントは大歓迎です!」
RhinoDevel 2016

2

dockerの実行中に同じ問題が発生します。

sudoユーザーとしてコマンドを実行できます。

sudo docker ***your command here***

2

Ubuntuの場合:
dockerを更新したときに私と一緒に起こりました。
サービスとソケットのマスクを解除してから、サービスを再起動する必要があります。

以下は私のために働きました:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service


systemdの背後で起こったことは、ユニットを/ dev / nullにリンクすることにより、自動または手動で完全に起動不可としてマークする機能もあります。これはユニットのマスキングと呼ばれ、maskコマンドで可能です。

sudo systemctl mask docker.service

以下を使用して、マスクされたサービスのリストを確認できます。

sudo systemctl list-unit-files

sudo systemctl list-unit-filesの出力

サービスの自動/手動開始を有効にするには、次を使用してマスクを解除する必要があります:

sudo sytemctl unmask docker.service

これで、以下に示すようにサービスが有効になります ここに画像の説明を入力してください


1

Dockerは起動時にrootが所有するUNIXソケットにバインドするため、Dockerコマンドとともに「sudo」を使用すると機能します。


1
  1. 私も同じ問題を抱えていました。問題はdocker-daemonとdocker-clientに割り当てられたソケットにありました。
  2. まず、docker.sockのdocker-clientに権限が設定されていませんでした。「sudo usermod -aG docker $ USER」を使用して設定できます。
  3. 次に、docker-clientが実行されているbashファイルを確認します。私にとっては、0.0.0.0:2375でしたが、docker-daemonはunixソケットで実行されていました(dockerdの構成ファイルで設定されていました)。
  4. bash-lineにコメントを付けるだけで問題なく動作します。
  5. ただし、unixソケットではなくTCPポートで機能させる場合は、dockerdの構成ファイルを変更して0.0.0.0.2375に設定し、行が存在する場合はそのままbashのままにするか、0.0.0.0に設定します。 2375。

1

エラーメッセージは非常に役に立たないので、おそらくこれは誰かを助けるでしょう、そして私はすべての標準的な許可手順を何度も行ったが役に立たなかった。

Dockerは、システムが正しくセットアップされているにもかかわらず、アクセスをブロックするゴースト環境変数を時々残します。次のシェルコマンドは、ある時点で実行していて、再起動後に連携を停止した場合に、再びアクセスできるようにする可能性があります。

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

以前は機能していたDockerをインストールしていましたが、ラップトップを再起動すると機能しなくなりました。正しく、ドッキングウィンドウのユーザー・グループに追加されたソケットに適切な権限を持っていた、など、まだ実行できませんでしたdocker logindocker run ...などこれは私のためにそれを修正しました。残念ながら、再起動するたびにこれを実行する必要があります。これはgithubのいくつかの問題で回避策としても言及されていますが、これはDockerの正しい操作に対する永続的な障壁であるというバグのようです(注:私はOSXではなくArch Linuxを使用していますが、これは同じ問題でした私)。


1

Ubuntu 16.04でテスト済み

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart

0

Amazon EC2インスタンスで同じエラーに直面しました。この問題は、インスタンスを再起動した後に修正されました。


0

現在のユーザーをdockerグループに追加します。

sudo usermod -aG docker $(whoami)


これをコードとしてフォーマットしてください!そして、このコマンドを説明します。また、長い--バージョンのオプションを使用します。
buhtz

0

以下のためのUbuntu 16.04

内部ファイルの/lib/systemd/system/docker.service変更:

ExecStart=/usr/bin/dockerd fd://

と:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

内部ファイルの/etc/init.d/docker変更:

DOCKER_OPTS=

と:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

その後、コンピュータを再起動します。

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