web-dev-qa-db-ja.com

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

私は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'ingコマンドを試しましたが、役に立ちませんでした。私はここで何をしていますか?

229
kramer65

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

Sudo usermod -aG docker $(whoami)

システムにlogout&login againするか、システムを再起動します。 docker versionによるテスト

docker-engineのインストール方法についての詳しい情報は docker documentation に従ってください。

428
Zubair Alam

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

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

    Sudo groupadd docker

  • 接続ユーザー "$ {USER}"をdockerグループに追加します。

    Sudo gpasswd -a ${USER} docker

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

    Sudo service docker restart

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

135
neo

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

Sudo service docker restart

これは、Dockerが既に実行されているような場合のdocker startの代わりに使用します。

それがうまくいくなら、提案されたようにそして別の答えで、そしてこれに関して 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

そして、以前のように、あなたはたぶん行くのが良いでしょう。

dockerを指定してSudoコマンドを実行するのを忘れた場合、質問のタイトルからエラーが発生します。

Sudo docker run ...

[Ubuntu 15.10]

18
Martin Vseticka

同じ問題を抱えていて、私にとってうまくいったのは次のとおりです。
/var/run/docker.sockの所有権の確認

ls -l /var/run/docker.sock

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

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

それなら先に進んでdockerコマンドを簡単に実行してみてください。D

12
kevthanewversi

すべてをインストールしてサービスを開始したら、端末を閉じてもう一度開いてから、画像を取得してみてください。

編集する

issue もう一度、上記の解決策がうまくいかない場合は、 この解決策 を試してください。

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

検討事項

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

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

あなたは本当にネットワークの問題を抱えていますが、次回再起動したときに( update 、2ヶ月も問題がない)あなたの _ os _ が再びこの問題を起こすかそれがバグまたはインストールの問題であれば

私のdockerのバージョン

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
9
deFreitas

Ubuntuにdockerをインストールした後、私は以下のコマンドを実行しました:

Sudo service docker start

試しましたか?

8
yushulx

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

それは私がやったときだけうまくいきました:

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

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

  2. それからあなたがあなた自身にdocker特権を与えていることを確認してください:

    $ Sudo usermod -aG docker $USER

これがあなたにも役立つことを願っています。

6
AmrMohallel

_ osx _ の場合:

Dockerを開いてQuickstart Terminal( https://docs.docker.com/engine/installation/mac/ )から「デフォルト」のマシンを起動した後、dockerコマンドを試してみると「接続できませんdocker daemon "message、 いくつかのenv変数を設定する必要があります

eval "$(docker-machine env default)"

それからdocker run hello-worldで試してみて、すべてが桃色かどうかを確認してください。

5
Danny

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

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

私はここでも同じ問題を抱えています、そしてdockerコマンドはrootとして、そしてこのDOCKER_Hostが空の状態でのみ動作していました。

PS:Ubuntuに/ - 正しい公式のインストール方法 を使うことであることにも注意してください(15.10でも)、 that not "wget"事.

5
Daniel Loureiro

すでにマシンを再起動しようとしている人は、 docker envのドキュメント に書かれているように環境変数DOCKER_Hostの設定を解除してください。

Sudo service docker restart

マシンを再起動した後でさえ、これだけが私のためのトリックをしました。

4
Mr.Moe

Root以外のアクセスを許可する - から docker

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

$ Sudo groupadd docker

接続ユーザー "$ {USER}"をdockerグループに追加します。

好みのユーザーに合わせてユーザー名を変更してください。

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

$ Sudo gpasswd -a ${USER} docker

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

$ Sudo service docker restart

この質問は現在、Google検索で3位です。私のLinuxシステムでこの問題を解決するためにいくつかの研究をした後、私はこの答えを書くことにしたと思いました。元の記事では、この問題はUbuntuにあると述べていましたが、私はFedoraを使用した問題も経験しました。それを念頭に置いて、ここで私は問題を解決するためにしたことです。

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

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

Output of Sudo systemctl list-unit-files

自動または手動のサービス開始を有効にするには、次のようにしてマスクを解除する必要があります。

Sudo sytemctl unmask docker.service

これでサービスは以下のように有効になります enter image description here

2
lordzuko

Dockerを実行中に同じ問題があります。

Sudo userとしてコマンドを実行できます。

Sudo docker ***your command here***
2
Dadaso Zanzane

実行しているコマンドで "Sudo"を使用するようにしてください。

2
user3737461

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
1
thiagofalcao

Dockerは起動時にrootが所有しているunixソケットにバインドするので、dockerコマンドと共に 'Sudo'を使用してもうまくいきます。

1
raja
  1. 私も同じ問題を抱えていました。問題はdocker-daemonとdocker-clientに割り当てられたソケットにありました。
  2. まず、docker.sockでdocker-clientに権限が設定されていません。 "Sudo usermod -aG docker $ USER"を使用して設定できます。
  3. それから、docker-clientが実行されているあなたのbashファイルをチェックしてください、私にとっては、docker-daemonがunixソケットで実行されている間、それは0.0.0.0:2375でした(それはdockerdの設定ファイルで設定されました)。
  4. 単にbash-lineをコメントするだけでうまくいきます。
  5. しかし、UnixソケットではなくTCP portで動作させたい場合は、dockerdの設定ファイルを変更して0.0.0.0.2375に設定し、存在する場合または設定されている場合はそのまま行をbashにしてください。 0.0.0.0:2375まで。
1
Nilesh Kande

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

0
Sumit Bhoyar

エラーメッセージは非常に役に立たないので、おそらくこれは誰かに役立つでしょう、そして私は無駄にするために何度も標準的な許可ステップのすべてを通過しました。

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

unset DOCKER_Host
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

私は以前作業していたdockerをインストールしていました、そして私のラップトップを再起動した後それは単に仕事を拒否しました。 dockerユーザーグループに正しく追加され、ソケットに対する適切なアクセス許可などを持っていましたが、それでもdocker logindocker run ...などを実行できませんでした。残念ながら、再起動するたびにこれを実行する必要があります。 これはいくつかのgithubの問題でも言及されている これは回避策としてであるが、これがDockerの正しい操作に対する永続的な障害であるというバグのように思われる。私にとっても同じ問題です。

0
mopsyd

用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"

その後、コンピュータを再起動してください。

0
user6646280

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

Sudo usermod -aG docker $(whoami)

0
BALAJI POTHULA