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:
# pacman -S docker
Fedora:
# dnf install docker
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):
# systemctl enable docker
Uruchom teraz (lub uruchom ponownie):
# systemctl start docker
Teraz domyślnie (jeśli brakuje grupy dokerów) gniazdo Docker jest własnością root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
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):
OPTIONS='--selinux-enabled -G dockerroot'
Po zrestartowaniu demona użytkownik będzie mógł uzyskać dostęp do gniazda:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
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:
# groupadd docker
# systemctl restart docker
Plik gniazda będzie własnością tej grupy:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Twój użytkownik musi być w docker
grupie, aby mieć dostęp do gniazda:
# usermod -aG docker (user)
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:
$ docker version --format '{{.Server.Version}}'
1.9.1
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).