Usługa Docker działa wyraźnie:
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
Docs: https://docs.docker.com
Main PID: 1015 (docker)
CGroup: /system.slice/docker.service
└─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root 1015 0.0 0.3 477048 12432 ? Ssl 2015 2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
Jednak Docker nie chce z nim rozmawiać:
$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Korzystam z domyślnej konfiguracji Dockera , tzn. Nie zmieniłem żadnych /etc
plików związanych z tą usługą.
W czym może być problem?
arch-linux
docker
l0b0
źródło
źródło
sudo systemctl start docker
naprawił to, demon naprawdę nie działał ...Na to pytanie już udzielono odpowiedzi, ale oto dodatkowa informacja.
Bez względu na to, czy korzystasz z Arch lub innej dystrybucji, takiej jak Fedora lub Ubuntu, Docker używa pliku gniazda do komunikacji. Po uruchomieniu
docker
poleceń używa tego gniazda do rozmowy z demonem Docker. Oczywiście demon musi być uruchomiony (i często jest domyślnie wyłączony), ale jeśli użytkownik nie może uzyskać dostępu do gniazda, nie będzie mógł również komunikować się z demonem.Najpierw należy zainstalować Docker z repozytorium dystrybucji. Niektóre osoby pobierają skrypt instalacyjny i przenoszą go do powłoki (
curl ... | sh
), ale zaleca się instalację go z repozytorium, aby można go było łatwo zaktualizować.Łuk:
Fedora:
Jak wspomniano powyżej, demon może być domyślnie wyłączony. Jeśli chcesz korzystać z Dockera, demon musi być uruchomiony.
Włącz go (aby był uruchamiany podczas rozruchu):
Uruchom teraz (lub uruchom ponownie):
Teraz domyślnie (jeśli brakuje grupy dokerów) gniazdo Docker jest własnością root:
Dlatego zwykły użytkownik nie może rozmawiać z demonem dokera. Zwykły użytkownik nie ma wystarczających uprawnień, aby uzyskać dostęp do gniazda. Nie jest w stanie dotrzeć do demona, więc zakłada, że nie działa i wyświetla ten błąd:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Dlatego wiele osób po prostu uruchamia wszystkie polecenia Dockera jako root, używając
sudo
. Ale jak opisano w drugiej odpowiedzi, Docker ma do tego swój własny mechanizm, więc używanie sudo nie jest konieczne.Idealnie, grupa o nazwie
docker
jest tworzona podczas instalacji Dockera. Jeśli jednak ta grupa nie istnieje podczas uruchamiania demona, plik gniazda jest własnością root.W niektórych przypadkach ta grupa miała inną nazwę,
dockerroot
na przykład w Fedorze . Sprawdź,grep docker /etc/group
czy w systemie jest taka grupa. Jeśli już korzystasz z tej grupy (masz w niej użytkownika), musisz skonfigurować Docker, aby z niej korzystać:W
/etc/sysconfig/docker
dodaj-G dockerroot
(uwaga: to obejście, a nie najlepsze rozwiązanie):Po zrestartowaniu demona użytkownik będzie mógł uzyskać dostęp do gniazda:
W przeciwnym razie oficjalnym sposobem byłoby użycie grupy o nazwie
docker
. Jeśli istnieje, Docker automatycznie go użyje, tj. Ustawi grupę gniazd na tę grupę. Jeśli nie istnieje, wystarczy go utworzyć i zrestartować demona:Plik gniazda będzie własnością tej grupy:
Twój użytkownik musi być w
docker
grupie, aby mieć dostęp do gniazda:Być może będziesz musiał się wylogować i zalogować ponownie (lub
su - (user)
), biegnij,id
aby sprawdzić, czy jesteś w grupie.Następnie możesz użyć Dockera bez sudo / root:
Wreszcie słowo ostrzeżenia. Tylko zaufani użytkownicy powinni mieć możliwość kontrolowania demona Docker . Zobacz https://docs.docker.com/engine/security/security/ .
(Ale oczywiście to samo dotyczy sudo - tylko zaufani użytkownicy powinni być w
wheel
grupie).źródło
następnie wyloguj się, a następnie zaloguj się ponownie
źródło
Po przeprowadzeniu badań nad rozwiązaniem tego problemu na moim systemie Linux pomyślałem, że napiszę tę odpowiedź. Oto, co zrobiłem, aby rozwiązać problem.
Na Fedorze 22
Instalowanie Dockera:
Po zainstalowaniu Dockera:
Użytkownik musi zostać dodany do grupy dokerów.
Demon dokera musi zostać uruchomiony
Możesz ustawić demona, aby uruchamiał się przy starcie systemu
Możesz sprawdzić, czy usługa dokowania jest uruchomiona
I ostatnia kontrola końcowa
źródło
pacman
, używaniesystemctl
zamiastservice
+chkconfig
).Jeśli używasz Fedory 23 lub wariantu Redhat, edytuj
/etc/sysconfig/docker
i zmodyfikuj następujące elementyUruchom ponownie okno dokowane.
Pamiętaj, aby dodać tę grupę do systemu i dodać siebie do grupy.
źródło
To polecenie działa dla mnie
Znalazłem rozwiązanie na tej stronie, jeśli potrzebujesz więcej dokumentacji. Dlaczego nie pozwalamy użytkownikom innym niż root uruchamiać Dockera w CentOS, Fedorze lub RHEL
źródło
Jeśli uruchomiłeś silnik dokera za pomocą: sudo service docker start
nie możesz połączyć się z normalnym użytkownikiem, nawet jeśli dodałeś się do grupy „dokerów”.
Możesz to po prostu zatrzymać za pomocą: sudo service docker stop
i uruchom go jak zwykły użytkownik: uruchom doker usługi
źródło
docker group
tej pory nie musiałem dodawać użytkownika .sudo service start
pracował dla mnie. Jednak obserwuje, czy jest coś nowego.Też miałem ten sam problem. Problem polegał na gniazdach przydzielonych do demona-dokera i klienta-dokera.
Po pierwsze, nie ustawiono uprawnień dla klienta-dokera na docker.sock. Można to ustawić za pomocą
sudo usermod -aG docker $USER
Następnie sprawdź plik bash, w którym działa klient dokera. Dla mnie ustawiono go na 0.0.0.0:2375, podczas gdy demon dokera działał na gnieździe unix. (Zostało ustawione w pliku konfiguracyjnym dockerd).
Po prostu skomentuj obraźliwą linię, a będzie dobrze.
Ale jeśli chcesz, aby działał na porcie TCP zamiast na gnieździe unixowym, zmień plik konfiguracyjny dockerd, ustaw go na 0.0.0.0.2375 i trzymaj linię w bash tak, jak jest, lub ustaw na 0.0. 0,0: 2375.
źródło
Są to kroki, które wykonałem, aby naprawić następujące
Dodaj siebie do grupy dokerów
usermod -aG docker $USER
Napraw uprawnienia w oknie dokowanym i poleceniu.
sudo chgrp docker /usr/bin/docker
sudo chgrp docker /var/run/docker.sock
$ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*
$ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock
Dodaj zmienne do środowiska konfiguracji dla polecenia dokera
export DOCKER_HOST=unix:///var/run/docker.sock
Reszta dokera
sudo systemctl restart docker
źródło