Docker-Compose nie może połączyć się z demonem platformy Docker

115

Otrzymuję komunikat o błędzie informujący, że nie mogę połączyć się z demonem Dockera. Przyjrzałem się odpowiedziom innych osób, które miały podobne problemy, ale to nie pomogło. Używam wersji Ubuntu 15.10. Postaram się podać wszystkie posiadane informacje.

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Wersja platformy Docker

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Wersja Docker-Compose

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

Tak się dzieje, gdy spróbuję zatrzymać lub uruchomić usługę ...

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

Jeśli biegnę ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

Każda pomoc byłaby bardzo mile widziana. Daj mi znać, jeśli będziesz potrzebować więcej informacji.

daveskylark
źródło
1
Nie niszcz swoich postów. Po wysłaniu pytania udzieliłeś licencji na zawartość całej społeczności Stack Overflow (na podstawie licencji CC-by-SA). Jeśli chcesz usunąć skojarzenie tego posta ze swojego konta, zobacz Jaka jest właściwa droga dla prośby o odłączenie? .
Błędy,

Odpowiedzi:

269

Miałem ten sam błąd po 15 minutach debugowania. Okazuje się, że wszystko, czego potrzebuje, to sudo:) Sprawdź [Utwórz grupę Docker] tutaj https://docs.docker.com/engine/installation/linux/ubuntulinux/, aby pozbyć się przedrostka sudo.

Mahmoud Zalt
źródło
35
Potrzebują lepszego błędu = / To pytanie ma 13 000 wyświetleń
Jonathan
4
człowieku, zaoszczędziłeś około 30 godzin tylko dla tych, którzy zagłosowali i prawdopodobnie to tylko 1% czasu, który faktycznie zaoszczędziłeś
vak
5
prawdziwą poprawką jest utworzenie grupy docker, podczas gdy sudomoim zdaniem jest to tylko obejście / włamanie. ponieważ część tworząca grupę nie jest tutaj wyjaśniona, podano tylko łącze, a zawartość tego łącza uległa zmianie, uważam to za odpowiedź tylko na łącze i jest teraz zasadniczo bezużyteczna (w przypadku prawdziwej części poprawionej). czy mógłbyś dodać opis jak dodać tę grupę?
hoijui,
2
Myślę, że sudoto również zły pomysł. Zobacz dokumentację Dockera
jwhitlock
6
Zasadniczo wszystko, co musisz zrobić sudo usermod -aG docker $USER, to i będzie działać później.
user2340939
66

Miałem ten problem i nie chciałem zepsuć rzeczy przy użyciu sudo. Podczas badania starałem się uzyskać informacje:

docker info

Zaskakująco miałem następujący błąd:

Odmowa dostępu podczas próby połączenia się z gniazdem demona Dockera pod adresem unix: ///var/run/docker.sock: Get http: ///var/run/docker.sock/v1.38/info : dial unix / var /run/docker.sock: connect: odmowa pozwolenia

Z jakiegoś powodu nie miałem wystarczających uprawnień, następujące polecenie rozwiązało mój problem:

sudo chown $USER /var/run/docker.sock

Zrobione !

madjaoue
źródło
A co po ponownym uruchomieniu dockera? Musimy znowu to zrobić?
Light.G
Nie, powinno działać po ponownym uruchomieniu dockera. Ale nie jestem pewien, co się stanie, jeśli ponownie uruchomisz komputer.
madjaoue
Domyślnie Docker trzymałby się docker.sockz grupą inną niż główna docker. Ale możemy to zmienić -Gflagą podczas inicjowania demona Dockera. W moim przypadku dodaję grupę dla $USERNAME, czyli dodaj grupę docker, a następnie zrestartuj mój komputer (ubuntu 16.04, PC). To dobrze działa. Jest to zalecane w dokumentach docker.
Światło. G
3
U mnie też działa :)
Kamil J.
27

Wygląda na to, że problem został spowodowany przez stary błąd Dockera, w którym plik gniazda nie został odtworzony po awarii Dockera. Jeśli to jest problem, zmiana nazwy pliku gniazda powinna umożliwić jego ponowne utworzenie:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

Ponieważ ten błąd został naprawiony, większość ludzi otrzymujących błąd Couldn't connect to Docker daemonprawdopodobnie otrzymuje go, ponieważ nie ma ich w dockergrupie i nie ma uprawnień do odczytu tego pliku. Bieganie z sudo docker ...rozwiązuje ten problem, ale nie jest świetnym rozwiązaniem.

Docker można uruchomić jako użytkownik inny niż root (bez sudo), który ma odpowiednie uprawnienia grupy. Dokumentacja poinstalacyjna systemu Linux zawiera szczegółowe informacje. Krótka wersja:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

Dzięki temu użytkownicy w dockergrupie mogą uruchamiać dockeri docker-composewydawać polecenia bez sudo. Sam Docker uruchamia root, pozwalając na niektóre ataki, więc nadal musisz uważać na używane kontenery. Aby uzyskać więcej informacji, zobacz dokumentację Docker Security .

jwhitlock
źródło
To pytanie jest specyficzne dla instalacji Linuksa, a poprawka obejmuje zmiany w systemie hosta Linux, aby to naprawić. Lepsze informacje uzyskasz, jeśli opublikujesz podobne pytanie z tymi samymi szczegółami, ale dla systemu Windows. Aby rozwiązać problem, polecam
uważne przeczytanie
10

Miałem ten sam problem. Po zrobieniu notatek i przeanalizowaniu niektórych wyników debugowania w końcu rozwiązałem, co może być tym samym błędem. Najpierw uruchom usługę,

service docker start

Nie zapomnij dołączyć użytkownika do grupy docker.

RA
źródło
Kiedy napotkałem ten błąd, pracowałem jako root. Wydawało się, że sudonaprawiłem to dla innych -_- Cieszę się, że to rzeczywiście to, o czym zapomniałem zrobić. Tak prosty!
Will
8

Powinieneś dodać swojego użytkownika do grupy "docker" za pomocą czegoś takiego:

sudo usermod -aG docker $ {UŻYTKOWNIK}

zhiiker
źródło
5

Otrzymałem ten błąd, gdy w Dockerfilekatalogu znajdowały się pliki , które nie były dostępne dla bieżącego użytkownika. dockerw związku z tym nie mógł przesłać pełnego kontekstu do demona i przyniósł komunikat „ Nie można połączyć się z demonem Dockera pod adresem http + docker: // localunixsocket ”.

cweiske
źródło
2
Dzięki! To rozwiązało to dla mnie. Łatwe do sprawdzenia, ponieważ wszystkie polecenia dockera działały, ale docker-compose nie. Również docker-compose działał w innym katalogu. BTW, bardzo mylący komunikat o błędzie.
Csongor Fagyal
1
To naprawdę powinno być wyżej
Arlen Anderson
1
Dzięki! pracował dla mnie. Użycie docker build .spowoduje problemy z uprawnieniami.
everyman
Jedyne, co zadziałało - dlaczego komunikaty o błędach Dockera są tak złe? Dzięki!
coderMe
4

Jednym ze sposobów rozwiązania tego problemu byłoby najpierw dodanie użytkownika do dockergrupy, uruchamiając następujące polecenie

sudo usermod -aG docker $USER

WAŻNE: pamiętaj, aby wylogować się z systemu (nie tylko z terminala) i zalogować się ponownie, aby to odniosło skutek!

arunavkonwar
źródło
sudo usermod -aG docker $ {UŻYTKOWNIK} Powinniśmy również wylogować się i zalogować, aby zastosować zmiany: su - $ {UŻYTKOWNIK}
user3785966
3

Z wyjścia "ps aux | grep docker" wygląda na to, że demon Dockera nie jest uruchomiony. Spróbuj użyć poniższych metod, aby zobaczyć, co jest nie tak i dlaczego docker się nie uruchamia

  1. Sprawdź dzienniki Dockera

$ sudo tail -f /var/log/upstart/docker.log

  1. Spróbuj uruchomić docker w trybie debugowania

$ sudo docker -d -D

Manish R
źródło
2

W moim przypadku Twoja usługa docker może zostać zatrzymana

Polecenie uruchomienia usługi docker:

$ sudo systemctl start docker

Polecenie do sprawdzenia, czy się uruchamia:

$ sudo docker run hello-world

John_J
źródło
2

Kolejny powód, dla którego ten błąd może się pojawić: dla mnie była to źle sformułowana definicja ścieżki obrazu w docker-compose.yml:

  service:
    image: ${CONTAINER_REGISTRY_BASE}/my-service
   ...

Najpierw wygląda dobrze, ale CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/ustawiłem na env. Najwyraźniej //ten błąd spowodował ścieżka obrazu.

docker-compose: v.1.21.2
docker: 18.03.1-ce
leberknecht
źródło
2

po prostu spróbuj sudo. Wygląda na to, że problem z pozwoleniem!

sudo docker-compose -f docker-compose-deps.yml up -d

to działało dla mnie.

Demobilizer
źródło
1

Użyłem Ubuntu 16.04 i znalazłem ten problem, gdy użyłem docker-compose. Naprawiłem to, uruchamiając to polecenie.

$ sudo systemctl start docker
$ sudo docker-compose build
Khachornchit Songsaen
źródło
1

Czy istnieje niewielka możliwość, że usunąłeś domyślną maszynę? Ale najpierw sprawdź, czy są tam wszystkie pliki (OSX, podobnie w innych systemach)

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

Zainstaluj także aplikację Docker, ponieważ konserwacja kontenerów jest znacznie łatwiejsza:

brew cask reinstall docker

i uruchom aplikację Docker z poziomu wyszukiwarki (poczekaj, aż usługa zostanie w pełni uruchomiona)

Następnie sprawdź instalację za pomocą:

docker-machine ls

jeśli na liście nie ma maszyn, utwórz jeden i uruchom go:

docker-machine create default
docker-machine start default

Następnie polecenie build, compose i wszystkie inne polecenia powinny działać poprawnie.

rapttor
źródło
1

w moim przypadku to dlatego, że zezwolenie ubuntu,

  1. Element listy

sprawdź pozwolenie przez

docker info 

jeśli wydrukują pozwolenie na problem, wprowadź opis obrazu tutaj użyj

sudo chmod -R 777 /var/run/docker.sock
joe-khoa
źródło
0

U mnie poprawka polegała na zainstalowaniu nowszej wersji (1.24) docker-composekorzystania z tego artykułu .

Poprzednia wersja (1.17) została zainstalowana z ubuntudomyślnego repozytorium, ale po zainstalowaniu nowszej wersji udało mi się uruchomić kontener. Mam nadzieję, że to komuś pomoże.

Artem Ilyin
źródło
0

Myślę, że to ze względu na prawo dostępu, po prostu musisz napisać

sudo docker-compose-deps.yml up
Moustapha Berrou
źródło
-1

W moim przypadku mam ten sam błąd, gdy próbuję, docker-compose build a moje rozwiązanie zostało po prostu dodanesudo

sudo docker-compose build
Andrey Suglobov
źródło
-2

Znalazłem to i wydawało się, że rozwiązało mój problem.

GitHub Napraw awarię demona platformy Docker

Zmieniłem zawartość mojego pliku docker-compose-deps.yml, jak widać w linku. Potem uciekłem docker-compose -f docker-compose-deps.yml up -d. Potem zmieniłem to z powrotem iz jakiegoś powodu zadziałało. Nie musiałem kontynuować czynności z podanego linku, ale pierwsze dwa kroki rozwiązały problem.

daveskylark
źródło
2
ubuntu 16.04: po prostu dodaj sudo: sudo docker-compose up -d
Moccine
To nie wystarczy jako odpowiedź. Jeśli chcesz zaakceptować własną odpowiedź, musisz podać podstawową przyczynę swojego problemu. W przeciwnym razie byłoby to dla innych naprawdę mylące. Przy okazji, są tu inne odpowiedzi, czy pomogły? Ponieważ nie widziałem żadnych komentarzy od Ciebie.
Light.G