wake-up-neo.net

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

Ich versuche, etwas über Docker zu erfahren, aber ich bekomme immer wieder kryptische (für mich) Fehlermeldungen.

Das einfachste Beispiel dafür ist 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 das Benutzerhandbuch durchlaufen und jeden Schritt genau befolgt, daher bin ich überrascht, dass ich diese Meldung bekomme ... Was soll ich jetzt tun?

Ich habe gerade bemerkt, dass ich den Fehler nicht bekomme, wenn ich nicht Sudo verwende:

$ 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 möglicherweise Sudo irgendwo auf der Straße benutzen muss ...

Ich habe gerade eine andere Seite gefunden und gesagt: "Wenn Sie OS X verwenden, sollten Sie Sudo nicht verwenden." Ich weiß nicht, ob sie nur für dieses Beispiel oder allgemein bedeuten.

217
Shawn

Durch Ausführen von $(boot2docker shellinit 2> /dev/null) wurde das Problem behoben.

Dadurch wird die Ausgabe des boot2docker shellinit-Befehls (die drei set -x ...-Zeilen) in Ihrer aktuellen Terminalsitzung ausgeführt, wodurch der docker-Befehl wissen kann, wo sich die virtuelle boot2docker-Maschine befindet.

Durch Hinzufügen von $(boot2docker shellinit 2> /dev/null) am Ende Ihrer ~/.bash_profile-Datei wird sichergestellt, dass der Befehl docker bei jedem Öffnen Ihres Terminals konfiguriert ist.


Für Benutzer von Fish Shell: boot2docker shellinit ^ /dev/null | source.


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

149
mauvm

Ich habe die gleiche Fehlermeldung mit Sudo und ohne Sudo auf MacOS erhalten.

Ich habe es gelöst mit:

boot2docker start
$(boot2docker shellinit)

P.S .: Danke an Alan. Ich habe herausgefunden, dass diese Vorgehensweise in ihren offiziellen Unterlagen empfohlen wird.

P.S.2: Manchmal kann boot2docker init erforderlich sein, bevor zwei Befehle ausgeführt werden (danke Aaron).

77
Salvador Dali

In meinem Fall (Linux Mint 17) habe ich verschiedene Dinge getan und 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 der Gruppe docker hinzugefügt:

$ Sudo usermod -aG docker ${USER}

Started daemon (openSUSE benötigt dies nur)

$ Sudo docker -d

Danke\Namensnennung


Danke Usman Ismail , weil es vielleicht nur das letzte war ...

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


Danke auch an github @ MichaelJCole für die Lösung, die für mich funktioniert hat, weil ich nicht nach dem Dämon gesucht habe, als ich Usmans Kommentar las.

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 post für das Erkennen der fehlenden Pakete. Vergessen Sie die standardmäßigen Ubuntu-Installationsanweisungen und gehen Sie andere Wege

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


Danke an brettof86 s Kommentar zu openSUSE

54
ElMesa

Das unterstrichene Problem ist einfach - fehlende Berechtigung für /var/run/docker.sock unix Domain Socket.

Von Daemon Socket-Optionchapter von Docker-Befehlszeile Referenz für Docker 1.6.0: 

Standardmäßig wird ein Unix-Domänensocket (oder IPC - Socket) um .__ erstellt. /var/run/docker.sock, erfordert entweder Root-Berechtigung oder Andockfenster Gruppenmitgliedschaft.

Schritte, die erforderlich sind, um Benutzern Rechte zu gewähren, werden in Docker Installationsanweisungen für Fedora beschrieben:

Gewähren von Benutzern für die Verwendung von Docker 

Das Docker-Befehlszeilentool kontaktiert den Docker-Daemon-Prozess über eine Socket-Datei /var/run/docker.sock gehört root:root. Obwohl es empfohlen wird, Verwenden Sie Sudo für Docker-Befehle, wenn Benutzer dies vermeiden möchten, eine Der Administrator kann eine Docker-Gruppe erstellen und über eine eigene .__ verfügen. /var/run/docker.sock und fügen Sie dieser Gruppe Benutzer hinzu.

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

Melden Sie sich ab und wieder an, um die oben genannten Änderungen zu übernehmen ..__ Beachten Sie, dass Docker-Pakete einiger Linux-Distributionen (Ubuntu) /var/run/docker.sock bereits in der Gruppe docker enthalten, wodurch die ersten beiden oben genannten Schritte nicht erforderlich sind.

Bei OS X und boot2docker ist die Situation anders; Der Docker-Daemon wird innerhalb einer VM ausgeführt, daher muss die Umgebungsvariable DOCKER_Host auf diese VM gesetzt sein, damit der Docker-Client den Docker-Daemon finden kann. Dies geschieht durch Ausführen von $(boot2docker shellinit) in der Shell.

48
Piotr Dobrogost

Stellen Sie sicher, dass der Docker-Daemon ausgeführt wird:

service docker start

Das hat es für mich behoben!

21
superlogical
  1. Docker bezeichnet sich selbst als autarke Laufzeitumgebung für Linux-Container ..__ In einfachen Worten fungiert es sowohl als Server als auch als Client.
  2. Die $ docker version-Befehlsabfrage 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 laufenden Docker-Daemon Dienst senden.
  4. Docker unterstützt standardmäßig TLS-Verbindungen zu seinem Dämon/Dienst.
  5. Nur wenn der Benutzer, mit dem Sie angemeldet sind, Teil der Benutzergruppe docker ist oder Sudo vor dem Befehl verwendet hat, z. $ Sudo docker images, erfordert dies keine TLS-Verbindung.

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

Scrollen Sie ein wenig nach oben und suchen Sie warning section zur Verdeutlichung.

14
Yogesh Kamat

Sie müssen 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
12
AL-Tamimi

Es ist möglich, dass Sie noch nicht über die Berechtigung für die Datei verfügen .. Es ist mir passiert, nachdem ich mich dockergroup mit hinzugefügt habe 

Sudo gpasswd -a user docker

aber noch nicht abgemeldet.

Um dieses Problem zu beheben, können Sie sich entweder erneut anmelden oder sg docker "docker <subcommand> ..." verwenden, bevor Sie sich abmelden.

Wenn Sie sich in der Gruppe docker in /etc/group befinden, sollten Sie es ausführen können, ohne das Kennwort einzugeben.

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/

10
Ding-Yi Chen

Nach der Installation von lxc-docker auf Ubuntu müssen Sie Ihren Benutzer zur docker user-Gruppe 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 zusätzlichen Gruppeneinstellungen gelöscht und die Gruppe "Docker" wird einfach 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
Pawel Barcik

TLDR: Dies hat meine Python-Meetup-Gruppe durch dieses Problem gelöst, als ich eine Klinik zur Installation von Docker betrieb und die meisten Benutzer unter OS X waren:

boot2docker init
boot2docker up

führen Sie dann die export-Befehle aus, die Ihnen die Ausgabe liefert

docker info

sollte dir sagen, dass es funktioniert.


Der Kontext (was uns zum Problem gebracht hat)

Ich habe eine Klinik bei der Installation von Docker geleitet und die meisten Teilnehmer hatten OS X, und wir sind auf dieses Problem gestoßen und haben es auf mehreren Maschinen ü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 bekamen wir Fässer, die wir zur Installation von Virtualbox verwendeten, und verwendeten dann brew, um Docker und boot2docker zu installieren (alle für OS X erforderlich) Sudo nicht zum Brühen verwenden. :

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. Folgendes wurde behoben. Ich verstehe, dass init ein einmaliger Deal war, aber wahrscheinlich müssen Sie up jedes Mal ausführen, wenn Sie Docker starten:

boot2docker init
boot2docker up

Wenn dann up ausgeführt wurde, gibt es mehrere export-Befehle. Kopieren und einfügen und ausführen.

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

Zur Demo

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

docker run hello-world
docker run -it ubuntu bash

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

apt-get install nano
exit

Zurück zu Ihrem nativen Benutzer bash:

docker ps -l

Suchen Sie nach der etwa 12-stelligen hexadezimalen Kennung (0-9 oder a-f) unter "Container ID", z. 456789abcdef. Sie können Ihre Änderung dann festschreiben und ihr einen beschreibenden Namen geben, wie descriptivename:

docker commit 456789abcdef descriptivename`
5
Aaron Hall

Alles, was Sie benötigen, 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 das oben genannte nicht funktioniert:

Sudo apt-get -y install apparmor cgroup-lite
Sudo service docker restart
3
tomrozb

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

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

2
MondKin

Für mich funktionierten folgende Schritte:

  1. Ich habe festgestellt, dass das Ausführen von docker run hello-world mit diesem gesockten Fehler wie in der Frage fehlschlägt, das Ausführen von Sudo docker run hello-world jedoch funktioniert.
  2. Ich habe meinen aktuellen Benutzer zur docker-Gruppe Sudo adduser user docker hinzugefügt. Dann müssen Sie Ihren Computer neu starten oder su - user verwenden (prüfen Sie mit dem Befehl groups, ob sich diese in der Gruppe docker befinden).

Danach begann hello-world zu arbeiten.

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


2
csharpfolk

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

1
ChaitanyaBhatt

Was es wert ist, habe ich alle Lösungen in dieser Frage und in dieser verwandten Frage ausprobiert, und bis zur Deinstallation von VirtualBox wurde keine Lösung gefunden. Bei diesem Vorgang wurde die VirtualBox von Version 4.2.16 auf 4.3.22 aktualisiert (meine vorherige lag seit einigen Monaten ungenutzt auf dem System).

Dann haben boot2docker und docker ohne weitere Einstellungen funktioniert.

1
gauden

Das gleiche Problem hatte ich, als ich Docker-Images aus Jenkins erstellte. Fügen Sie den Benutzer einfach zur Gruppe docker 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:

[[email protected] ssh]# groupadd docker
[[email protected] ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[[email protected] ssh]# /etc/init.d/docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ]
[[email protected] ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [  OK  ]
Starting Jenkins                                           [  OK  ]
[[email protected] ssh]#
0
Avinash Singh

Stellen Sie sicher, dass es gibt

127.0.0.1    localhost

in deiner 

`/etc/hosts `

datei.

0
bolerovt

Der Docker-Daemon bindet sich an einen Unix-Socket statt an einen TCP -Port. Standardmäßig gehört der Unix-Socket dem Benutzer root, und andere Benutzer können nur über 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 erneut bewertet wird.

docker run hello-world

Quelle: Docker als Benutzer ohne Rootberechtigung verwalten

0
Shabbir Bata

Ich hatte das gleiche Problem und habe verschiedene Schritte unternommen, um das Problem zu beheben, indem ich die .bash_profile-Datei änderte und sich ohne Erfolg ein- und ausloggte. Am Ende wurde der Neustart meines Computers behoben.

0
DavB