Czy próbuję połączyć się z demonem obsługującym TLS bez TLS?

221

Próbuję dowiedzieć się o Dockerze , ale wciąż otrzymuję tajemnicze (dla mnie) komunikaty o błędach.

Być może najprostszym przykładem tego jest próba wydrukowania zainstalowanej wersji Dockera:

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

Właśnie przeglądałem instrukcję użytkownika i dokładnie wykonuję każdy krok, więc jestem zaskoczony, że dostałem ten komunikat ... Co powinienem teraz zrobić?

Właśnie zauważyłem, że jeśli nie używam sudo, nie dostaję błędu:

$ 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

Oczywiście nie jest to rozwiązanie, ponieważ być może będę musiał skorzystać sudoz drogi ...

Właśnie znalazłem inną stronę z napisem „ Jeśli używasz OS X , nie powinieneś używać sudo”. Nie wiem, czy mają na myśli tylko ten przykład, czy ogólnie.

Shawn
źródło
38
Głupie pytanie, ale czy uruchomiłeś demona dokera?
Usman Ismail,
Postępowałem zgodnie z instrukcją obsługi, więc tak, wierzę, że demon dokera został uruchomiony. Jak mogę dwukrotnie sprawdzić?
Shawn,
5
Właściwie znalazłeś rozwiązanie. Z boot2docker nigdy nie będziesz potrzebować sudo z linuksem, zawsze będziesz potrzebować sudo. Wynika to z faktu, że boot2docker faktycznie uruchamia te polecenia w wirtualnym pudełku, które jest skonfigurowane tak, aby poprawnie uzyskiwać dostęp do demona.
Usman Ismail
1
Walczyłem z tym problemem i bieganie bez sudo działało dla mnie
sak
6
Prawie wszystkie odpowiedzi są specyficzne dla OS X (wspominają boot2docker), chociaż OS X nie jest wyraźnie wymieniony w pytaniu lub tagach. Jeśli ktoś jest zainteresowany ogólną odpowiedzią, proszę zobaczyć moją odpowiedź.
Piotr Dobrogost

Odpowiedzi:

150

Dla mnie bieganie $(boot2docker shellinit 2> /dev/null)naprawiło problem.

Spowoduje to uruchomienie danych wyjściowych boot2docker shellinitpolecenia (trzech set -x ...wierszy) w bieżącej sesji terminala, dzięki czemu dockerpolecenie będzie wiedziało, gdzie znaleźć maszynę wirtualną boot2docker.

Dodanie $(boot2docker shellinit 2> /dev/null)do dolnej części ~/.bash_profilepliku sprawi, że dockerpolecenie zostanie skonfigurowane przy każdym otwarciu terminala.


Dla osób korzystających z Fish skorupę: boot2docker shellinit ^ /dev/null | source.


Pamiętaj, że 2> /dev/null(i odpowiednik Fish ^ /dev/null) są opcjonalne. Jak sugerował @ pablo-fernandez, to ukrywa Writing ..linie.

mauvm
źródło
Już to zrobiłem, ale dodam go do .bash_profile, dobry pomysł
Shawn,
zdecydowanie pomaga w boot2docker 1.5, ale starszy boot2docker 1.2 nie zrobił tego poprawnie
Max Markov
1
Dodałem przekierowanie stderr, aby nie pojawiły się instrukcje „Pisanie ...”: $ (boot2docker shellinit 2> / dev / null)
Pablo Fernandez
3
Dziękuję wspomnieć o skorupce rybnej! Rozwiązałem problem dla mnie.
cyrillk
1
Jak wspomniano w odpowiedzi Salvadora Dali poniżej, upewnij się, że również biegniesz boot2docker startprzed uruchomieniem powłoki init.
Kevin
78

Otrzymałem ten sam błąd na MacOS z sudo i bez niego.

Rozwiązałem to za pomocą:

boot2docker start
$(boot2docker shellinit)

PS: Dzięki Alan. Dowiedziałem się, że takie podejście jest zalecane w ich oficjalnej dokumentacji .

PS2: Czasami boot2docker initmoże być wymagane przed uruchomieniem dwóch poleceń (dziękuję Aaron).

Salvador Dali
źródło
To działało, ale nie rozumiem dlaczego? co robi $ (boot2docker shellinit)?
Emile
To działało w Mac OS X, ale mam to samo pytanie co Emile, tj. Dlaczego to zadziałało?
Nissan
Nie działało to dla mnie w systemie Mac OSX 10.10.4 z Docker Tools.
b01,
Musiałem nie tylko uruchomić shell2it boot2docker, ale także skopiować i uruchomić każde z wyświetlanych poleceń. Oficjalna dokumentacja linku mówi, że to polecenie wyświetla tylko wymagany zestaw poleceń
Vitaliy Lebedev
Pracował również dla mnie na komputerze z systemem Windows.
Noushad
55

W moim przypadku (Linux Mint 17) robiłem różne rzeczy i nie jestem pewien, które z nich są całkowicie konieczne.

Dołączyłem brakujące pakiety Ubuntu:

$ sudo apt-get install apparmor lxc cgroup-lite

Użytkownik został dodany do grupy docker:

$ sudo usermod -aG docker ${USER}

Uruchomiony demon (openSUSE tego właśnie potrzebuje)

$ sudo docker -d

Dzięki \ Uznanie autorstwa


Dzięki Usman Ismail , bo może to była ostatnia rzecz ...

Głupie pytanie, ale czy uruchomiłeś demona dokera? - Usman Ismail, 17 grudnia 14 o 15:04


Podziękowania również dla github @ MichaelJCole za rozwiązanie, które działało dla mnie, ponieważ nie sprawdzałem demona, kiedy czytałem komentarz Usmana.

Komentarz 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

Dzięki postowi fredjean.net za zauważenie brakujących pakietów i zapomnienie o domyślnych instrukcjach instalacji Ubuntu oraz o innych sposobach Google

Okazuje się, że pakiety cgroup-lite i lxc nie są domyślnie instalowane w Linux Mint. Zainstalowanie obu pozwoliło mi uruchomić bash na obrazie podstawowym, a następnie zbudować i uruchomić mój obraz.


Dzięki komentarzowi brettof86 na temat openSUSE

ElMesa
źródło
2
Dzięki! W moim przypadku (Mennica 17.1) brakowało aparatu.
Alexandre L Telles
2
Dodanie się do grupy Döcker zrobił coś dla mnie sudo adduser $USER docker. Sztuczka, aby curgroup=$(id -gn) && newgrp docker && newgrp $curgroup
zadziałała
1
Myślę, że fakt, że ma to znacznie niższy wynik, to fakt, że więcej osób używa OS X niż Linux? Używam Ubuntu 14.04 i działa dla mnie.
woda lodowa
1
openSUSE i ja potrzebowałem tylko uruchomić demona
blockloop
Przepraszam za moją ignorancję na temat maszyny dokującej, ale nie wiem. Ale jeśli się dowiesz, zaznacz to tutaj w komentarzach lub edytuj odpowiedź. : D
ElMesa,
49

Podkreślenie problemu jest proste - brak uprawnień do /var/run/docker.sockgniazda domeny unix.

Od demon gniazdko opcji rozdziału z Docker Command Line odniesienia dla Döcker 1.6.0:

Domyślnie tworzone jest gniazdo domeny unix (lub gniazdo IPC) /var/run/docker.sock, wymagające uprawnień administratora lub członkostwa w grupie dokerów .

Kroki niezbędne do przyznania uprawnień użytkownikom są dobrze opisane w instrukcjach instalacji Dockera dla Fedory :

Przyznawanie użytkownikom uprawnień do korzystania z Dockera

Narzędzie wiersza polecenia dokera kontaktuje się z procesem demona dokera za pośrednictwem pliku gniazda /var/run/docker.socknależącego do root:root. Chociaż zaleca się używanie sudo do poleceń dokera, jeśli użytkownicy chcą tego uniknąć, administrator może utworzyć grupę dokerów, mieć ją /var/run/docker.socki dodawać użytkowników do tej grupy.

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

Wyloguj się i zaloguj ponownie, aby zastosować powyższe zmiany. Należy pamiętać, że pakiety Docker niektórych dystrybucji Linuksa (Ubuntu) już umieszczają się /var/run/docker.sockw dockergrupie, przez co pierwsze dwa powyższe kroki nie są konieczne.

W przypadku OS X boot2dockersytuacja jest inna; demon Docker działa wewnątrz maszyny wirtualnej, więc DOCKER_HOSTzmienna środowiskowa musi być ustawiona na tę maszynę wirtualną, aby klient Docker mógł znaleźć demona Docker. Odbywa się to poprzez uruchomienie $(boot2docker shellinit)w powłoce.

Piotr Dobrogost
źródło
1
Hmm, moja sytuacja jest podobna, ale subtelnie inna. Korzystam z systemu Ubuntu 14.04. Docker pozornie zainstalowany poprawnie (wprowadzenie tylko „dokera” powoduje wyświetlenie listy poleceń). Utworzyłem grupę dokerów i dołączyłem do niej mojego użytkownika. To tylko system domowy, a ja po prostu bawię się dokerem. Jednak coś innego niż tylko „doker” wywołuje błąd. Wierzę w to, ponieważ doker nie może utworzyć /var/run/docker.sock. W moim systemie / var / run jest dowiązaniem symbolicznym do / run, które jest root: root i perm 755, więc doker nie może tam pisać. Nie jestem pewien, jakie byłoby moje rozwiązanie tego problemu.
Steve Cohen,
Piotr, to wyjaśnienie jest bardzo przydatne. Czy możesz wyjaśnić, dlaczego „$ (boot2docker shellinit)” działa, ale zwykły „boot2docker shellinit” nie? Rozumiem, że nawiasy oznaczają wykonanie w podpowłoce, ale nie udało mi się ustalić, dlaczego jest to konieczne, aby doker działał poprawnie, gdy żadne inne polecenie tego nie wymaga ...
Alex Edelstein
@AlexEdelstein Różnica między boot2docker shellinitinnymi poleceniami polega na tym, że to polecenie nie wprowadza żadnych zmian, a jedynie generuje (drukuje) polecenia, które należy uruchomić samodzielnie. Możesz uruchomić boot2docker shellinitnajpierw, a następnie ręcznie skopiować i uruchomić każde polecenie z jego danych wyjściowych. Łatwiej jest uruchomić wszystkie polecenia, uruchamiając je boot2docker shellinitw podprocesie (ze $()składnią), ponieważ w ten sposób każdy wiersz danych wyjściowych jest automatycznie uruchamiany jako polecenie powłoki. Zobacz docs.docker.com/installation/mac/#from-your-command-line, gdzie pokazano to szczegółowo.
Piotr Dobrogost
@ SteveCohen Możesz sprawdzić, czy działa usługa dokowania sudo service docker status. Na moim Ubuntu 14.04 nie działał po instalacji, co spowodowało błąd.
razz0
1
Dzięki za połączenie faktycznej dokumentacji głównej przyczyny, rozwiązałem mój problem
RonaldFindling
23

Upewnij się, że demon Docker działa:

service docker start

To naprawiło to dla mnie!

superlogiczny
źródło
sudo service docker startdla mnie
Milimetric
systemctl enable docker.servicei systemctl start docker.service Dla użytkowników system.d linux (Arch w moim przypadku)
PRDeving
sudo service docker restartdla mnie
Frozen Flame
15
  1. Docker nazywa się samowystarczalnym środowiskiem uruchomieniowym dla kontenerów Linux. W prostych słowach działa zarówno jako serwer, jak i klient.
  2. $ docker versionZapytania komenda znajduje się wewnątrz pliku wykonywalnego Docker a nie na chodzie demon / usług.
  3. $ docker images or $ docker ps or $ docker pull centos to polecenia wysyłające zapytania do uruchomionego demona / usługi dokującej.
  4. Docker domyślnie obsługuje połączenia TLS ze swoim demonem / usługą.
  5. Tylko wtedy, gdy użytkownik jest zalogowany jako członek grupy użytkowników dockerlub użytkownik użył go sudoprzed poleceniem, np $ sudo docker images. Nie wymaga połączenia TLS.

Odwiedź stronę dokumentacji Docker Chroń gniazdo demona Docker .

Przewiń trochę do góry i znajdź warning sectiondla jasności.

Yogesh Kamat
źródło
1
Popularne odpowiedzi jak dotąd dotyczą tylko OS X, podczas gdy ta jest bardziej ogólna, wyjaśnia przyczynę i pozwoliła mi ją rozwiązać na GNU / Linux.
sinisterstuf
1
@ laffuste twoje polecenie USUNĄ DODATKOWE GRUPY UŻYTKOWNIKA. z powodu brakującego „-a”
Paweł Barcik
3
@PawelBarcik straszny błąd, dzięki:sudo usermod -a -G docker {username}
Laffuste
1
Jak ta odpowiedź odpowiada na pytanie? Jaki jest powód błędu? Jak to naprawić? (Nie korzystam z systemu OS X, więc istniejące odpowiedzi nie mają zastosowania).
Piotr Dobrogost
13

Będziesz musiał zrobić:

$boot2docker init
$boot2docker start

Następujące ustawienia rozwiązały problem:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1
AL-Tamimi
źródło
1
Tego polecenia można także użyć do ustawienia zmiennych środowiskowych (zamiast robić to ręcznie):eval "$(boot2docker shellinit)"
Powers
11

Możliwe, że nie masz jeszcze uprawnień do pliku. Zdarzyło mi się to po dodaniu się do dockergrupy za pomocą

sudo gpasswd -a user docker

ale jeszcze nie wyloguj się.

Aby rozwiązać ten problem, możesz się ponownie zalogować lub użyć sg docker "docker <subcommand> ..."przed wylogowaniem.

Jeśli jesteś w grupie docker IN /etc/group, powinieneś być w stanie uruchomić go bez hasła pisania.

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 /

Ding-Yi Chen
źródło
7

Na Ubuntu po instalacji lxc-docker trzeba dodać użytkownika do doker grupy użytkowników:

sudo usermod -a -G docker myusername

Wynika to z uprawnień do plików gniazda:

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

NIE URUCHAMIAJ usermod BEZ „-a”, jak sugerowano w jednym z pozostałych komentarzy, w przeciwnym razie wyczyści to dodatkowe ustawienia grup i po prostu opuści grupę „dokerów”

Oto co się stanie:

➜  ~  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)
Paweł Barcik
źródło
6

TLDR : To pomogło mojej grupie spotkań w Pythonie ominąć ten problem, kiedy prowadziłem klinikę dotyczącą instalacji dokera i większość użytkowników korzystała z systemu OS X:

boot2docker init
boot2docker up

uruchom exportpolecenia, które daje ci wynik

docker info

powinienem powiedzieć, że to działa.


Kontekst (co doprowadziło nas do problemu)

Poprowadziłem klinikę dotyczącą instalacji dokera, a większość uczestników miała system OS X, natrafiliśmy na ten problem i przezwyciężyłem go na kilku komputerach. Oto kroki, które wykonaliśmy:

Najpierw zainstalowaliśmy homebrew (tak, niektórzy uczestnicy go nie mieli):

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

Potem mamy beczkę, której użyliśmy do zainstalowania virtualboksa, a następnie użyliśmy brew do zainstalowania dockera i boot2dockera (wszystkie wymagane dla OS X). Nie używaj sudo do brew. :

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

Rozwiązanie

Wtedy natrafiliśmy na problem, który dostał tutaj pytający. Następujące to naprawiło. Rozumiem, że initbyła to jednorazowa umowa, ale prawdopodobnie będziesz musiał działać przy upkażdym uruchomieniu dokera:

boot2docker init
boot2docker up

Następnie, po upuruchomieniu, wydaje kilka exportpoleceń. Skopiuj-wklej i uruchom je.

Wreszcie docker infopowinien powiedzieć, że jest poprawnie zainstalowany.

Do pokazu

Reszta poleceń powinna to pokazać. (na Ubuntu Linux potrzebowałem sudo).

docker run hello-world
docker run -it ubuntu bash

Powinieneś być na skorupce głównej w kontenerze:

apt-get install nano
exit

Powrót do nashowego użytkownika:

docker ps -l

Poszukaj około 12 cyfr szesnastkowego (0–9 lub af) identyfikatora w polu „Identyfikator kontenera”, np 456789abcdef. Następnie możesz zatwierdzić zmianę i nazwać ją opisową nazwą, na przykład descriptivename:

docker commit 456789abcdef descriptivename`
Aaron Hall
źródło
5

Wszystko, czego potrzebujesz, aby uruchomić Docker na Linux Ubuntu / Mint:

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

Opcjonalnie może być konieczne zainstalowanie dwóch dodatkowych zależności, jeśli powyższe nie działa:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart
tomrozb
źródło
1
Dałbym sobie +1, gdyby było to możliwe - szukałem rozwiązania i znalazłem własne rozwiązanie, o którym zapomniałem :)
tomrozb
To mi pomogło. Zdałem sobie sprawę, że usługa dokowania nie działała po instalacji, więc sudo service docker startrozwiązałem problem na moim Ubuntu 14.04.
razz0
3

Wypróbowałem tutaj rozwiązania, a boot2docker nie działał.

Moje rozwiązanie: odinstaluj boot2docker na komputerze Mac, zainstaluj maszynę Wirtualną Centos 7 w VirtualBox i pracuj z Dockerem wewnątrz tej maszyny wirtualnej.

MondKin
źródło
3

Dla mnie zadziałały następujące kroki:

  1. Zauważyłem, że uruchamianie docker run hello-worldkończy się niepowodzeniem z tym błędem, jak w pytaniu, ale działa sudo docker run hello-world.
  2. Dodałem mojego obecnego użytkownika do dockergrupy sudo adduser user docker. Następnie musisz ponownie uruchomić komputer lub użyć su - user(sprawdź za pomocą groupspolecenia, jeśli są w dockergrupie).

Następnie hello-worldzaczął działać.

Moja odpowiedź oparta jest na: Jak korzystać z dokera bez sudo? co wyjaśnia, co poszło nie tak.


csharpfolk
źródło
Po dodaniu self do grupy, dokuj `newgrp docker; newgrp grupa podstawowa powoduje utworzenie podpowłoki z nową grupą podstawową dokera, a następnie przywraca prawidłową grupę podstawową. (Trochę włamania).
ctrl-alt-delor
2

Za to, co jest warte, wypróbowałem wszystkie rozwiązania zawarte w tym pytaniu i pokrewnym pytaniu i żadne nie rozwiązało mojego problemu, dopóki nie odinstalowałem i nie ponownie zainstalowałem VirtualBox . Ten proces uaktualnił VirtualBox z wersji 4.2.16 do 4.3.22 (mój poprzedni leżał nieużywany w systemie przez kilka miesięcy).

Wtedy boot2dockeri dockerpracował bez żadnych innych zmian.

daedalus
źródło
2

Miałem ten sam problem. Prosty service docker restartrozwiązał problem.

ChaitanyaBhatt
źródło
2

Demon Docker łączy się z gniazdem Unix zamiast z portem TCP. Domyślnie gniazdo Unix jest własnością użytkownika root, a inni użytkownicy mogą uzyskać do niego dostęp tylko za pomocą sudo. Demon Docker zawsze działa jako użytkownik root.

sudo groupadd docker
sudo usermod -aG docker $USER

Wyloguj się i zaloguj ponownie, aby ponownie ocenić członkostwo w grupie.

docker run hello-world

Źródło: Zarządzaj Dockerem jako użytkownik inny niż root

Shabbir Bata
źródło
1

Miałem ten sam problem i próbowałem różnych rzeczy, aby to naprawić, zmieniając plik .bash_profile, logując się i wylogowując, bez powodzenia. W końcu zrestartowanie mojego komputera naprawiło to.

DavB
źródło
0

Upewnij się, że jest

127.0.0.1    localhost

w Twoim

`/etc/hosts `

plik.

bolerovt
źródło
0

Ten sam problem napotkałem podczas tworzenia obrazów Docker od Jenkins. Po prostu dodaj użytkownika dodocker grupy, a następnie ponownie uruchomić usługi Docker, aw moim przypadku musiałem zrestartować usługi Jenkins.

To był błąd, który dostałem:

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]#
Avinash Singh
źródło
-1

Innym możliwym powodem jest to, że wizualizacja procesora BIOS nie jest włączona. Najpierw włącz i włącz!

Xianlin
źródło