Versuche ich, eine Verbindung zu einem TLS-fähigen Daemon ohne TLS herzustellen?


221

Ich versuche, etwas über Docker zu lernen , erhalte aber immer wieder kryptische (für mich) Fehlermeldungen.

Das einfachste Beispiel hierfür ist möglicherweise der Versuch, die von mir installierte Version von Docker zu drucken:

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

Ich habe gerade die Bedienungsanleitung durchgesehen und jeden Schritt genau befolgt. Daher bin ich überrascht, dass ich diese Meldung erhalte ... Was soll ich jetzt tun?

Ich habe gerade bemerkt, dass ich sudoden Fehler nicht bekomme , wenn ich ihn nicht benutze :

$ 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

Natürlich ist dies keine Lösung, da ich sie möglicherweise sudoirgendwo später verwenden muss ...

Ich habe gerade eine andere Seite gefunden, auf der steht : " Wenn Sie OS X verwenden , sollten Sie es nicht verwenden sudo." Ich weiß nicht, ob sie nur für dieses Beispiel oder allgemein bedeuten.


38
Dumme Frage, aber hast du den Docker-Daemon gestartet?
Usman Ismail

Ich habe die Bedienungsanleitung befolgt, also glaube ich, dass der Docker-Daemon gestartet ist. Wie kann ich das überprüfen?
Shawn

5
Eigentlich hast du die Lösung gefunden. Mit boot2docker brauchen Sie nie sudo unter Linux, Sie würden immer sudo brauchen. Dies liegt daran, dass boot2docker diese Befehle tatsächlich in einer virtuellen Box ausführt, die für den korrekten Zugriff auf den Dämon eingerichtet ist.
Usman Ismail

1
Ich hatte Probleme mit diesem Problem und das Laufen ohne Sudo hat für mich funktioniert
Sak

6
Fast alle Antworten sind OS X-spezifisch (sie erwähnen boot2docker), obwohl OS X in der Frage oder den Tags nicht explizit erwähnt wird. Wenn jemand an einer generischen Antwort interessiert ist, lesen Sie bitte meine Antwort.
Piotr Dobrogost

Antworten:


150

Für mich hat das Laufen $(boot2docker shellinit 2> /dev/null)das Problem behoben.

Dadurch wird die Ausgabe des boot2docker shellinitBefehls (die drei set -x ...Zeilen) in Ihrer aktuellen Terminalsitzung ausgeführt, wodurch der dockerBefehl weiß, wo sich die virtuelle Maschine boot2docker befindet.

Durch Hinzufügen $(boot2docker shellinit 2> /dev/null)am Ende Ihrer ~/.bash_profileDatei wird sichergestellt, dass der dockerBefehl jedes Mal konfiguriert wird, wenn Sie Ihr Terminal öffnen.


Für Personen, die Fischschalen verwenden : boot2docker shellinit ^ /dev/null | source.


Beachten Sie, dass 2> /dev/null(und das Fischäquivalent ^ /dev/null) optional sind. Wie @ pablo-fernandez vorgeschlagen hat, verbirgt dies die Writing ..Linien.


Ich hatte dies bereits getan, aber ich werde es zu .bash_profile hinzufügen, gute Idee
Shawn

hilft definitiv mit boot2docker 1.5, aber ein älterer boot2docker 1.2 hat es nicht richtig gemacht
Max Markov

1
Ich habe eine stderr-Umleitung hinzugefügt, damit die Anweisungen "Writting ..." nicht angezeigt werden: $ (boot2docker shellinit 2> / dev / null)
Pablo Fernandez

3
Vielen Dank, um die Fischschale zu erwähnen! Das Problem wurde für mich gelöst.
Cyrillk

1
Stellen Sie, wie in Salvador Dalis Antwort unten erwähnt, sicher, dass Sie auch ausführen, boot2docker startbevor Sie die Shell-Init ausführen .
Kevin

78

Ich habe den gleichen Fehler unter MacOS mit und ohne sudo erhalten.

Ich habe es gelöst mit:

boot2docker start
$(boot2docker shellinit)

PS: Danke an Alan. Ich fand heraus, dass dieser Ansatz in der offiziellen Dokumentation empfohlen wird .

PS2: Manchmal boot2docker initkann es erforderlich sein, zwei Befehle auszuführen (danke Aaron).


Das hat funktioniert, aber ich verstehe nicht warum? Was macht das $ (boot2docker shellinit)?
Emile

Dies funktionierte unter Mac OS X, aber ich habe die gleiche Frage wie Emile, dh warum hat das funktioniert?
Nissan

Dies funktionierte unter Mac OSX 10.10.4 mit Docker Tools nicht.
B01

Ich musste nicht nur boot2docker shellinit ausführen, sondern auch jeden der angezeigten Befehle kopieren und ausführen. Offizielle Dokumentation über den Link besagt, dass dieser Befehl nur die erforderlichen Befehle anzeigt
Vitaliy Lebedev

Arbeitete auch für mich auf einer Windows-Maschine.
Noushad

55

In meinem Fall (Linux Mint 17) habe ich verschiedene Dinge getan, und ich bin mir nicht sicher, welche davon absolut notwendig sind.

Ich habe fehlende Ubuntu-Pakete hinzugefügt:

$ sudo apt-get install apparmor lxc cgroup-lite

Ein Benutzer wurde zur Gruppe hinzugefügt docker:

$ sudo usermod -aG docker ${USER}

Started Daemon (openSUSE benötigt dies nur)

$ sudo docker -d

Danke \ Namensnennung


Danke Usman Ismail , denn vielleicht war es nur das Letzte ...

Dumme Frage, aber hast du den Docker-Daemon gestartet? - Usman Ismail 17. Dezember 14 um 15:04 Uhr


Vielen Dank auch an github @ MichaelJCole für die Lösung, die für mich funktioniert hat, da ich beim Lesen von Usmans Kommentar nicht nach dem Daemon gesucht habe .

GitHub Kommentar :

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

Vielen Dank an fredjean.net für den Hinweis auf die fehlenden Pakete und vergessen Sie die Standard-Installationsanweisungen für Ubuntu und googeln Sie über andere Möglichkeiten

Es stellt sich heraus, dass die Pakete cgroup-lite und lxc unter Linux Mint nicht standardmäßig installiert sind. Durch die Installation von beiden konnte ich dann bash im Basis-Image ausführen und dann mein Image erstellen und ausführen.


Dank des Kommentars von brettof86 zu openSUSE


2
Vielen Dank! In meinem Fall (Mint 17.1) fehlte der Apparmor.
Alexandre L Telles

2
Das Hinzufügen zur Docker-Gruppe hat das für mich getan sudo adduser $USER docker. Trick, um es wirksam an dem aktuell Shell wurde curgroup=$(id -gn) && newgrp docker && newgrp $curgroup, angepasst von superuser.com/questions/272061/...
Tero Tilus

1
Ich denke, die Tatsache, dass dies eine weitaus niedrigere Punktzahl hat, liegt daran, dass mehr Leute OS X als Linux verwenden? Ich benutze Ubuntu 14.04 und es funktioniert für mich.
Eiswasser

1
openSUSE und ich mussten nur den Daemon
Blockloop

Entschuldigen Sie meine Unwissenheit über Docker-Maschine, aber ich weiß es nicht. Aber wenn Sie es herausfinden, weisen Sie bitte hier in den Kommentaren darauf hin oder bearbeiten Sie die Antwort. : D
ElMesa

49

Das Problem der Unterstreichung ist einfach: Keine Berechtigung zum /var/run/docker.sockUnix-Domain-Socket.

Von Daemon Socket - Option Kapitel von Docker Befehlszeilenreferenz für Docker 1.6.0:

Standardmäßig wird ein Unix-Domain-Socket (oder IPC-Socket) unter erstellt /var/run/docker.sock, für den entweder eine Root-Berechtigung oder eine Docker-Gruppenmitgliedschaft erforderlich ist .

Die Schritte, die erforderlich sind, um Benutzern Rechte zu gewähren, sind in den Docker- Installationsanweisungen für Fedora ausführlich beschrieben :

Gewähren von Benutzernrechten zur Verwendung von Docker

Das Docker-Befehlszeilentool kontaktiert den Docker-Daemon-Prozess über eine Socket-Datei /var/run/docker.sockvon root:root. Obwohl empfohlen wird, sudo für Docker-Befehle zu verwenden, kann ein Administrator, wenn Benutzer dies vermeiden möchten, eine Docker-Gruppe erstellen, eine eigene /var/run/docker.sockhaben und Benutzer zu dieser Gruppe hinzufügen.

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

Melden Sie sich ab und wieder an, damit die oben genannten Änderungen wirksam werden. Bitte beachten Sie, dass Docker-Pakete einiger Linux-Distributionen (Ubuntu) bereits /var/run/docker.sockin der dockerGruppe enthalten sind, sodass die ersten beiden oben genannten Schritte nicht erforderlich sind .

Im Falle von OS X ist boot2dockerdie Situation anders; Der Docker-Dämon wird in einer VM ausgeführt, daher muss die DOCKER_HOSTUmgebungsvariable auf diese VM festgelegt werden, damit der Docker-Client den Docker-Dämon finden kann. Dies erfolgt durch Ausführen $(boot2docker shellinit)in der Shell.


1
Hmm, meine Situation ist ähnlich, aber subtil anders. Ich laufe unter Ubuntu 14.04. Docker scheint korrekt installiert zu sein (wenn Sie nur "Docker" eingeben, wird die Liste der Befehle angezeigt). Ich habe eine Docker-Gruppe erstellt und meinen Benutzer zu einem Mitglied gemacht. Dies ist nur ein Heimsystem und ich spiele nur mit Docker. Alles andere als nur "Docker" bringt jedoch den Fehler hervor. Ich glaube es, weil Docker /var/run/docker.sock nicht erstellen kann. Auf meinem System ist / var / run ein Symlink zu / run, der root: root und 755 perm ist, sodass Docker dort nicht schreiben kann. Ich bin mir nicht sicher, was meine Lösung dafür sein würde.
Steve Cohen

Piotr, diese Erklärung ist sehr nützlich. Canyou erläutern, warum "$ (boot2docker shellinit)" funktioniert, einfaches "boot2docker shellinit" jedoch nicht? Ich verstehe, dass die Klammern die Ausführung in einer Unterschale implizieren, aber ich konnte nicht herausfinden, warum dies notwendig ist, damit Docker ordnungsgemäß funktioniert, wenn keiner der anderen Befehle dies erfordert ...
Alex Edelstein

@AlexEdelstein Der Unterschied zwischen boot2docker shellinitund anderen Befehlen besteht darin, dass dieser Befehl selbst keine Änderungen vornimmt, sondern nur Befehle generiert (druckt), die Sie selbst ausführen müssen. Sie können boot2docker shellinitjeden Befehl zuerst ausführen und dann manuell kopieren und von seiner Ausgabe ausführen. Es ist einfacher, alle Befehle auszuführen, indem sie boot2docker shellinitin einem Unterprozess (mit $()Syntax) ausgeführt werden, da auf diese Weise jede Ausgabezeile automatisch als Shell-Befehl ausgeführt wird. Siehe docs.docker.com/installation/mac/#from-your-command-line, wo dies im Detail gezeigt wird.
Piotr Dobrogost

@SteveCohen Möglicherweise möchten Sie überprüfen, ob der Docker-Dienst mit ausgeführt wird sudo service docker status. Auf meinem Ubuntu 14.04 lief es nach der Installation nicht, was den Fehler verursachte.
Razz0

1
Vielen Dank für die Verknüpfung der eigentlichen Dokumentation für die Grundursache, löste mein Problem
RonaldFindling

23

Stellen Sie sicher, dass der Docker-Dämon ausgeführt wird:

service docker start

Das hat es für mich behoben!


sudo service docker startfür mich
Milimetric

systemctl enable docker.serviceund systemctl start docker.service Für system.d Linux-Benutzer (Arch in meinem Fall)
PRDeving

sudo service docker restartfür mich
Frozen Flame

15
  1. Docker nennt sich selbst eine autarke Laufzeit für Linux-Container. In einfachen Worten fungiert es sowohl als Server als auch als Client.
  2. Die $ docker versionBefehlsabfrage ist intern für die ausführbare Docker-Datei und nicht für den ausgeführten Daemon / Dienst.
  3. $ docker images or $ docker ps or $ docker pull centos sind Befehle, die Abfragen an den Docker-Daemon / -Dienst senden, der ausgeführt wird.
  4. Docker unterstützt standardmäßig TLS-Verbindungen zu seinem Daemon / Dienst.
  5. Nur wenn der Benutzer, bei dem Sie angemeldet sind, Teil der Benutzergruppe ist dockeroder den Sie sudovor dem Befehl verwendet haben, z. B. $ sudo docker imageskeine TLS-Konnektivität erforderlich ist.

Besuchen Sie die Docker-Dokumentationsseite. Schützen Sie den Docker-Daemon-Socket .

Scrollen Sie ein wenig nach oben und finden Sie es warning sectionzur Klarheit.


1
Beliebte Antworten gelten bisher nur für OS X, während diese viel allgemeiner ist, die Ursache erklärt und es mir ermöglicht hat, sie unter GNU / Linux zu lösen.
sinisterstuf

1
@laffuste Ihr Befehl wird die zusätzlichen Gruppen des Benutzers abwischen. wegen des fehlenden "-a"
Pawel Barcik

3
@ PawelBarcik schrecklicher Fehler, danke:sudo usermod -a -G docker {username}
Laffuste

1
Wie beantwortet diese Antwort die Frage? Was ist der Grund für den Fehler? Wie man es repariert? (Ich bin nicht unter OS X, daher gelten vorhandene Antworten nicht.)
Piotr Dobrogost

13

Sie müssen Folgendes tun:

$boot2docker init
$boot2docker start

Die folgenden Einstellungen haben das Problem behoben:

$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
Dieser Befehl kann auch verwendet werden, um die Umgebungsvariablen festzulegen (anstatt es manuell zu tun):eval "$(boot2docker shellinit)"
Powers

11

Möglicherweise haben Sie noch keine Berechtigung für die Datei. Es ist mir passiert, nachdem ich mich der dockerGruppe hinzugefügt habe

sudo gpasswd -a user docker

aber noch nicht abmelden.

Um dies zu beheben, können Sie sich entweder erneut anmelden oder sg docker "docker <subcommand> ..."vor dem Abmelden verwenden.

Wenn Sie in der Gruppe sind docker in/etc/group , sollten Sie in der Lage sein , es ohne Eingabe Passwort auszuführen.

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

Unter Ubuntu müssen Sie nach der Installation von lxc-docker Ihren Benutzer zur Docker- Benutzergruppe hinzufügen :

sudo usermod -a -G docker myusername

Dies liegt an den Socket-Dateiberechtigungen:

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

Führen Sie usermod NICHT OHNE "-a" aus, wie in einem der anderen Kommentare vorgeschlagen. Andernfalls werden Ihre Einstellungen für zusätzliche Gruppen gelöscht und die Gruppe "Docker" verlassen

Folgendes wird passieren:

➜  ~  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 : Dadurch hat meine Python-Meetup-Gruppe dieses Problem überwunden, als ich eine Klinik zur Installation von Docker betrieb und die meisten Benutzer unter OS X waren:

boot2docker init
boot2docker up

Führen exportSie dann die Befehle aus, die Ihnen die Ausgabe gibt

docker info

sollte dir sagen, dass es funktioniert.


Der Kontext (was uns zum Problem gebracht hat)

Ich leitete eine Klinik für die Installation von Docker und die meisten Teilnehmer hatten OS X, und wir stießen auf dieses Problem, und ich habe es auf mehreren Computern überwunden. Hier sind die Schritte, die wir befolgt haben:

Zuerst haben wir Homebrew installiert (ja, einige Teilnehmer hatten es nicht):

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

Dann haben wir ein Fass bekommen, mit dem wir Virtualbox installiert haben, und dann Brew, um Docker und Boot2docker zu installieren (alle für OS X erforderlich). Verwenden Sie Sudo nicht zum Brauen. ::

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

Die Lösung

Das war, als wir auf das Problem stießen, das der Fragesteller hier bekam. Das Folgende hat es behoben. Ich verstehe, es initwar ein einmaliger Deal, aber Sie müssen wahrscheinlich upjedes Mal laufen, wenn Sie Docker starten:

boot2docker init
boot2docker up

Wenn upes dann ausgeführt wurde, gibt es mehrere exportBefehle. Kopieren, einfügen und ausführen.

Schließlich docker infosollte Ihnen sagen, dass es richtig installiert ist.

Zur Demo

Der Rest der Befehle sollte es demonstrieren. (Unter Ubuntu Linux benötigte ich Sudo.)

docker run hello-world
docker run -it ubuntu bash

Dann sollten Sie sich auf einer Root-Shell im Container befinden:

apt-get install nano
exit

Zurück zu Ihrer nativen Benutzer-Bash:

docker ps -l

Suchen Sie unter "Container ID" nach der etwa 12-stelligen hexadezimalen Kennung (0-9 oder af), z 456789abcdef. Sie können dann Ihre Änderung zu übernehmen und ihm einen beschreibenden Namen nennen, wie descriptivename:

docker commit 456789abcdef descriptivename`

5

Alles, was Sie brauchen, um Docker unter Linux Ubuntu / Mint auszuführen:

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

Optional müssen Sie möglicherweise zwei zusätzliche Abhängigkeiten installieren, wenn die oben genannten Funktionen nicht funktionieren:

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

1
Ich würde mir +1 geben, wenn es möglich wäre - ich suchte nach einer Lösung und fand meine eigene Lösung, die ich vergessen hatte :)
Tomrozb

Das hat mir geholfen. Ich stellte fest, dass der Docker-Dienst nach der Installation nicht ausgeführt wurde, und sudo service docker startlöste das Problem auf meinem Ubuntu 14.04.
Razz0

3

Ich habe die Lösungen hier ausprobiert und boot2docker hat nicht funktioniert.

Meine Lösung: Deinstallieren Sie boot2docker auf dem Mac, installieren Sie eine Centos 7-VM in VirtualBox und arbeiten Sie mit Docker in dieser VM.


3

Bei mir haben folgende Schritte funktioniert:

  1. Ich habe festgestellt, dass das Ausführen docker run hello-worldmit diesem Fehler wie in der Frage fehlschlägt, aber das Ausführen hat sudo docker run hello-worldfunktioniert.
  2. Ich habe meinen aktuellen Benutzer zur dockerGruppe hinzugefügt sudo adduser user docker. Dann müssen Sie Ihren Computer neu starten oder verwenden su - user(überprüfen Sie mit dem groupsBefehl, ob Sie in der dockerGruppe sind).

Danach hello-worldbegann zu arbeiten.

Meine Antwort basiert auf Wie kann ich Docker ohne Sudo verwenden? das erklärt, was schief geht.



Nachdem Sie self zur Gruppe hinzugefügt haben, führen Sie `newgrp docker aus. newgrp-Primärgruppe Hiermit wird eine Unterschale mit einer neuen primären Docker-Gruppe erstellt und anschließend die richtige Primärgruppe wiederhergestellt. (Ein bisschen wie ein Hack).
Strg-Alt-Delor

2

Für das, was es wert ist, habe ich alle Lösungen in dieser Frage und in dieser verwandten Frage ausprobiert und keine hat mein Problem gelöst, bis ich VirtualBox deinstalliert und neu installiert habe . Durch diesen Vorgang wurde die VirtualBox von Version 4.2.16 auf 4.3.22 aktualisiert (meine vorherige war einige Monate lang nicht verwendet auf dem System).

Dann boot2dockerund dockerohne weitere Anpassungen gearbeitet.


2

Ich hatte das gleiche Problem. Ein einfacher service docker restartlöste das Problem.


2

Der Docker-Daemon wird anstelle eines TCP-Ports an einen Unix-Socket gebunden. Standardmäßig gehört dieser Unix-Socket dem Benutzer root und andere Benutzer können nur mit sudo darauf zugreifen. Der Docker-Daemon wird immer als Root-Benutzer ausgeführt.

sudo groupadd docker
sudo usermod -aG docker $USER

Melden Sie sich ab und wieder an, damit Ihre Gruppenmitgliedschaft neu bewertet wird.

docker run hello-world

Quelle: Verwalten Sie Docker als Nicht-Root-Benutzer


1

Ich hatte das gleiche Problem und versuchte verschiedene Dinge, um dies zu beheben. Ich änderte die Datei .bash_profile, loggte mich ein und aus, ohne Glück. Am Ende wurde es durch einen Neustart meines Computers behoben.


0

Stellen Sie sicher, dass es gibt

127.0.0.1    localhost

in deinem

`/etc/hosts `

Datei.


0

Ich hatte das gleiche Problem, als ich Docker-Images von Jenkins erstellte. Fügen Sie einfach den Benutzer zur dockerGruppe hinzu und starten Sie die Docker-Dienste neu. In meinem Fall musste ich die Jenkins-Dienste neu starten.

Dies war der Fehler, den ich bekam:

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

Ein weiterer möglicher Grund ist, dass Ihre BIOS-CPU-Visualisierung nicht aktiviert ist. Gehen Sie und aktivieren Sie es zuerst!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.