TLSなしでTLS対応デーモンに接続しようとしていますか?


221

私はDockerについて学習しようとしていますが、不可解な(私には)エラーメッセージが表示され続けます。

おそらくこれの最も簡単な例は、私がインストールしたDockerのバージョンを印刷しようとすることです。

$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?

私はちょうどユーザーガイドを通り抜けて、すべてのステップを正確にたどっていたので、このメッセージを受け取って驚いています...今何をすべきですか?

私が使用しない場合sudoはエラーが発生しないことに気づきました:

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

もちろん、私はsudo将来どこかで使用する必要があるかもしれないので、これは解決策ではありません...

私はちょうど見つけ、別のページを言って、「あなたはOS Xを使用している場合、あなたは使用しないでくださいsudo。」それらがその例だけで意味するのか、それとも一般的に意味するのかはわかりません。


38
ばかげた質問ですが、Dockerデーモンを開始しましたか?
Usman Ismail 2014

私はユーザーガイドに従っているので、はい、Dockerデーモンが起動していると思います。どうすれば再確認できますか?
Shawn、

5
実際に解決策を見つけました。boot2dockerを使用すると、Linuxでsudoが必要になることはなく、常にsudoが必要になります。これは、boot2dockerが実際にデーモンに正しくアクセスするように設定されている仮想ボックスでこれらのコマンドを実行するためです。
Usman Ismail 2014

1
私はこの問題に苦しんでいて、sudoなしで実行するのがうまくいきました
2014

6
OS Xは質問やタグで明示的に言及されていませんが、ほとんどすべての回答はOS X固有です(彼らはについてboot2docker言及しています)。誰かが一般的な答えに興味があるなら、私の答えを見てください。
Piotr Dobrogost 2015

回答:


150

私にとって、走る$(boot2docker shellinit 2> /dev/null)ことで問題は解決しました。

これにより、現在のターミナルセッションでboot2docker shellinitコマンドの出力(3 set -x ...行)が実行されdocker、boot2docker仮想マシンの場所をコマンドに知らせます。

ファイル$(boot2docker shellinit 2> /dev/null)の最後に追加すると、ターミナルを開くたびにコマンドが設定されます。~/.bash_profiledocker


魚シェルを使用している人々のために:boot2docker shellinit ^ /dev/null | source


2> /dev/null(および対応するFish ^ /dev/null)はオプションであることに注意してください。@ pablo-fernandezが提案したように、これはWriting ..行を隠します。


私はすでにこれを実行しましたが、それを.bash_profileに追加します。良いアイデアです
Shawn

確かにboot2docker 1.5には役立ちますが、古い方のboot2docker 1.2では正しく機能しませんでした
Max Markov

1
「書き込み中...」ステートメントが表示されないようにstderrリダイレクトを追加しました:$(boot2docker shellinit 2> / dev / null)
Pablo Fernandez

3
魚の殻に言及していただきありがとうございます!私のために問題を解決しました。
キリル

1
以下のサルバドールダリの回答で述べたようにboot2docker start、シェルのinitを実行する前に実行することも確認してください。
ケビン

78

MacOSでsudoを使用しても使用しなくても同じエラーが発生しました。

私はそれで解決しました:

boot2docker start
$(boot2docker shellinit)

PS:アランに感謝します。私はこのアプローチが彼らの公式ドキュメントで推奨されていることを知りました。

PS2:boot2docker init 2つのコマンドを実行する前に必要になる場合があります(アーロンに感謝します)。


うまくいきましたが、なぜなのかわかりませんか?$(boot2docker shellinit)は何をしていますか?
2015年

これはMac OS Xで機能しましたが、Emileと同じ質問があります。つまり、なぜこの機能が機能したのですか?
日産

これは、Docker Toolsを搭載したMac OSX 10.10.4では動作しませんでした。
b01

boot2docker shellinitを実行するだけでなく、表示された各コマンドをコピーして実行する必要もありました。リンクによる公式ドキュメントには、このコマンドは必要なコマンドのセットのみを表示することが記載されています
Vitaliy Lebedev '19

私もWindowsマシンで働いた。
Noushad

55

私の場合(Linux Mint 17)私はさまざまなことをしましたが、どれが完全に必要かはわかりません。

不足しているUbuntuパッケージを含めました:

$ sudo apt-get install apparmor lxc cgroup-lite

ユーザーがグループに追加されましたdocker

$ sudo usermod -aG docker ${USER}

開始済みデーモン(openSUSEはこれを必要とするだけです)

$ sudo docker -d

ありがとう\帰属


Usman Ismailに感謝します。おそらくそれが最後のことだったのかもしれません...

ばかげた質問ですが、Dockerデーモンを開始しましたか?– Usman Ismail 2014年12月17日15:04


Usmanのコメントを読んだときにデーモンをチェックしなかったので、うまくいった解決策についてgithub @ MichaelJColeにも感謝します。

GitHubコメント

sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get  install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash

不足しているパッケージに気づいたfredjean.netの投稿に感謝し、デフォルトのUbuntuインストール手順を忘れ、他の方法についてGoogle

Linux Mintには、デフォルトでcgroup-liteパッケージとlxcパッケージがインストールされていないことがわかりました。両方をインストールすると、ベースイメージでbashを実行し、イメージをビルドして実行することができました。


openSUSEに関するbrettof86のコメントに感謝


2
ありがとう!私の場合(Mint 17.1)欠けていたのはapparmorでした。
アレクサンドルLテルズ

2
ドッキングウィンドウのグループに自分自身を追加すると、私のための事をしましたsudo adduser $USER docker。現在のシェルで効果を発揮させるためのトリックはcurgroup=$(id -gn) && newgrp docker && newgrp $curgroupsuperuser.com
questions / 272061 /…

1
これはスコアがはるかに低いというのは、Linuxよりも多くの人がOS Xを使用しているためだと思いますか?私はUbuntu 14.04を使用していますが、問題なく動作します。
icedwater 2015年

1
openSUSEのと私はデーモンを起動するために必要な
blockloop

docker-machineについての無知を失礼しますが、知りません。しかし、見つけた場合は、コメントまたは回答を編集してここで指摘してください。:D
ElMesa 2015年

49

下線の問題は単純です– /var/run/docker.sockUNIXドメインソケットへのアクセス許可の欠如。

デーモンソケットオプションの ドッカーコマンドラインドッカー1.6.0のための参照:

デフォルトでは、UNIXドメインソケット(またはIPCソケット)がに作成され /var/run/docker.sockroot権限またはdockerグループメンバーシップが必要です。

ユーザーに権限を付与するために必要な手順は、Fedoraの Docker インストール手順でうまく説明されています

ユーザーにDockerを使用する権限を付与する

dockerコマンドラインツールは、/var/run/docker.sockが所有するソケットファイルを介してdockerデーモンプロセスに接続します root:root。dockerコマンドにはsudoを使用することをお勧めしますが、ユーザーがそれを避けたい場合は、管理者はdockerグループを作成し、それを所有し /var/run/docker.sock、ユーザーをこのグループに追加できます。

$ sudo groupadd docker
$ sudo chown root:docker /var/run/docker.sock
$ sudo usermod -a -G docker $USERNAME

上記の変更を有効にするには、ログアウトして再度ログインします。一部のLinuxディストリビューション(Ubuntu)のDockerパッケージはすでにグループに配置さ/var/run/docker.sockれてdockerいるため、上記の最初の2つの手順は不要です。

OS Xの場合とboot2docker状況が異なります。DockerデーモンはVM内で実行DOCKER_HOSTされるため、DockerクライアントがDockerデーモンを見つけられるように、環境変数をこのVMに設定する必要があります。これは$(boot2docker shellinit)、シェルで実行することによって行われます。


1
うーん、私の状況は似ていますが微妙に異なります。Ubuntu 14.04で実行しています。Dockerは正しくインストールされているようです(「docker」と入力するだけでコマンドのリストが表示されます)。Dockerグループを作成し、ユーザーをそのグループのメンバーにしました。これは単なるホームシステムで、Dockerで遊んでいます。ただし、「ドッカー」以外のものはエラーを引き起こします。dockerは/var/run/docker.sockを作成できないので、私はそれを信じています。私のシステムでは、/ var / runは/ runへのシンボリックリンクであり、root:rootおよび755 permであるため、Dockerはそこに書き込むことができません。これに対する私の解決策がどうなるかわかりません。
スティーブコーエン

Piotr、この説明はとても役に立ちます。「$(boot2docker shellinit)」が機能する理由を詳しく説明できますが、単純な「boot2docker shellinit」は機能しないのですか?かっこはサブシェルでの実行を意味することを理解していますが、他のコマンドがそれを必要としないときにdockerを適切に機能させるためにそれが必要な理由を理解することができませんでした...
Alex Edelstein

@AlexEdelstein boot2docker shellinitと他のコマンドの違いは、このコマンド自体は何も変更せず、自分で実行する必要のあるコマンドを生成(印刷)するだけです。boot2docker shellinit最初に実行してから、出力から各コマンドを手動でコピーして実行することができます。この方法で出力の各行がシェルコマンドとして自動的に実行されるためboot2docker shellinit、サブプロセス($()構文付き)で実行することにより、すべてのコマンドを実行する方が簡単です。これが詳細に示されているdocs.docker.com/installation/mac/#from-your-command-lineを参照してください。
Piotr Dobrogost

@SteveCohen dockerサービスがで実行されていることを確認したい場合がありsudo service docker statusます。Ubuntu 14.04では、インストール後に実行されず、エラーが発生しました。
razz0 2015

1
根本原因の実際のドキュメントをリンクしていただきありがとうございます。問題は解決しました
RonaldFindling 2017

23

Dockerデーモンが実行されていることを確認します。

service docker start

これで解決しました!


sudo service docker start私にとって
ミリメトリック2015

systemctl enable docker.serviceおよびsystemctl start docker.service system.d linuxユーザーの場合(私の場合はArch)
PRDeving 2015

sudo service docker restart私にとって
Frozen Flame

15
  1. Dockerは、それ自体をLinuxコンテナーの自己完結型ランタイムと呼んでいます。簡単に言うと、サーバーとクライアントの両方として機能します。
  2. $ docker versionコマンドクエリは、ドッカー実行可能にしていないデーモン/サービスの実行に内蔵されています。
  3. $ docker images or $ docker ps or $ docker pull centos 実行中のdockerデーモン/サービスにクエリを送信するコマンドです。
  4. Dockerはデフォルトで、そのデーモン/サービスへのTLS接続をサポートしています。
  5. ログインしているユーザーがユーザーグループの一部であるdockersudo、コマンドの前に使用したことがある場合のみ(たとえば$ sudo docker images、TLS接続は必要ありません)。

Dockerドキュメントページにアクセスして、Dockerデーモンソケットを保護します

少し上にスクロールして、warning sectionわかりやすくします。


1
これまでの一般的な回答はOS Xにのみ当てはまりますが、これはより一般的なもので、原因を説明し、GNU / Linuxで解決することを可能にしました。
sinisterstuf

1
@laffusteコマンドはユーザーの追加グループをワイプします。"-a"がないため
Pawel Barcik 2015年

3
@PawelBarcikの恐ろしい間違い、ありがとう:sudo usermod -a -G docker {username}
laffuste

1
この答えはどのように質問に答えますか?エラーの理由は何ですか?それを修正するには?(私はOS Xを使用していないため、既存の回答は適用されません)。
Piotr Dobrogost 2015

13

あなたがする必要があります:

$boot2docker init
$boot2docker start

次の設定で問題が修正されました:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

1
また、このコマンドは、(むしろそれを手動で行うよりも)環境変数を設定するために使用することができます:eval "$(boot2docker shellinit)"
パワーズ

11

まだファイルへのアクセス権がない可能性があります。私をdocker使用してグループに自分を追加した後、それは私に起こりました

sudo gpasswd -a user docker

まだログアウトしていません。

これを解決するには、再ログインするか、sg docker "docker <subcommand> ..."ログアウトする前にを使用 します。

のグループに参加docker している場合は、/etc/groupパスワードを入力しなくても実行できるはずです。

https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a- tls-enabled-daemon-without-tls /


7

Ubuntuでインストールした後、LXC-ドッキングウィンドウを、あなたはにユーザーを追加する必要がありドッキングウィンドウのユーザーグループ:

sudo usermod -a -G docker myusername

これは、ソケットファイルの権限が原因です。

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock

他のコメントの1つで提案されているように、「-a」なしでusermodを実行しないでください。実行すると、追加のグループ設定が消去され、「docker」グループだけが残ります。

これは何が起こるかです:

➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)

6

TLDR:これにより、Dockerのインストールでクリニックを実行していて、ほとんどのユーザーがOS Xを使用していたときに、Pythonのミートアップグループがこの問題を乗り越えました。

boot2docker init
boot2docker up

export出力から得られるコマンドを実行してから、

docker info

それが機能することを教えてください。


コンテキスト(問題の原因)

私はdockerのインストールについてクリニックを主導し、ほとんどの参加者がOS Xを持っていて、私たちはこの問題に遭遇し、いくつかのマシンでそれを克服しました。これが私たちが従った手順です:

最初に、自作をインストールしました(はい、一部の参加者はそれを持っていませんでした):

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

次に、virtualboxをインストールするために使用したcaskを取得し、brewを使用してdockerとboot2dockerをインストールしました(すべてOS Xに必要)brewにはsudoを使用しないでください。

brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker

ソリューション

私たちがここで求めた問題に遭遇したのはそのときでした。以下はそれを修正しました。私initは1回限りの取引だったと理解していますが、upDockerを起動するたびに実行する必要があります。

boot2docker init
boot2docker up

次に、upが実行されると、いくつかのexportコマンドが表示されます。それらをコピーして貼り付けて実行します。

最後に、docker infoそれが正しくインストールされていることを教えてください。

デモへ

残りのコマンドはそれをデモします。(Ubuntu Linuxではsudoが必要でした。)

docker run hello-world
docker run -it ubuntu bash

次に、コンテナのルートシェルにいるはずです:

apt-get install nano
exit

ネイティブユーザーbashに戻ります。

docker ps -l

「コンテナID」の下で、約12桁の16進数(0-9またはaf)の識別子を探し456789abcdefます。次に、変更をコミットして、次のようなわかりやすい名前を付けますdescriptivename

docker commit 456789abcdef descriptivename`

5

Linux Ubuntu / MintでDockerを実行するために必要なすべて:

sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart

上記が機能しない場合、オプションで、2つの追加の依存関係をインストールする必要があります。

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart

1
可能な場合は自分に+1します-解決策を探していて、忘れていた自分の解決策を見つけました:)
tomrozb

これは私を助けました。インストール後にdockerサービスが実行されていないことに気づきsudo service docker start、Ubuntu 14.04で問題を解決しました。
razz0

3

ここで解決策を試しましたが、boot2dockerが機能しませんでした。

私の解決策: Macからboot2dockerをアンインストールし、VirtualBoxにCentos 7 VMをインストールして、そのVM内でDockerを操作します。


3

私にとっては、次の手順が機能しました:

  1. docker run hello-world質問のようにこの靴下のエラーで実行が失敗することに気付きましたが、実行は機能しsudo docker run hello-worldました。
  2. 現在のユーザーをdockerグループに追加しましたsudo adduser user docker。次に、マシンを再起動するか使用する必要がありますsu - user(グループに属しているgroups場合は、コマンドを使用して確認してくださいdocker)。

その後、hello-world働き始めました。

私の答えは、sudoなしでdockerを使用するにはどうすればよいかに基づいています。何がうまくいかないかを説明します。



自分をグループに追加した後、 `newgrp docker; newgrp primary-groupこれにより、Dockerの新しいプライマリグループを持つサブシェルが作成され、正しいプライマリグループが再確立されます。(少しハック)。
ctrl-alt-delor 2017年

2

価値があることについて、私はこの質問とこの関連質問のすべての解決策を試しましたが、VirtualBoxをアンインストールして再インストールするまで、問題は解決しませんでした。このプロセスにより、VirtualBoxがバージョン4.2.16から4.3.22にアップグレードされました(以前のバージョンでは、数か月間システム上で使用されていませんでした)。

その後boot2dockerdocker他の調整なしで動作しました。


2

私も同じ問題を抱えていました。シンプルでservice docker restart問題は解決しました。


2

Dockerデーモンは、TCPポートではなくUnixソケットにバインドします。デフォルトでは、Unixソケットはユーザーrootが所有しており、他のユーザーはsudoを使用してのみアクセスできます。Dockerデーモンは常にrootユーザーとして実行されます。

sudo groupadd docker
sudo usermod -aG docker $USER

ログアウトしてから再度ログインすると、グループメンバーシップが再評価されます。

docker run hello-world

ソース:Dockerを非rootユーザーとして管理します


1

私は同じ問題を抱えており、これを修正するためにさまざまなことを試みました。運が悪ければ.bash_profileファイルを修正し、ログインしてログアウトしました。結局、マシンを再起動すると修正されました。


0

あることを確認してください

127.0.0.1    localhost

あなたの

`/etc/hosts `

ファイル。


0

JenkinsからDockerイメージを作成するときにも、同じ問題に直面しました。ユーザーをdockerグループに追加し、Dockerサービスを再起動するだけです。私の場合、Jenkinsサービスを再起動する必要がありました。

これは私が得たエラーでした:

http:///var/run/docker.sock/v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile

Solution:

[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [  OK  ]
Starting Jenkins                                           [  OK  ]
[root@Jenkins ssh]#

-1

考えられるもう1つの理由は、BIOS CPU視覚化が有効になっていないことです。まず、有効にしてください!

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