Docker-Compose non può connettersi a Docker Daemon


114

Ricevo un messaggio di errore che dice che non riesco a connettermi al daemon Docker. Ho esaminato le risposte di altre persone che hanno avuto problemi simili ma non ha aiutato. Sto eseguendo la versione di Ubuntu 15.10. Cercherò di fornire tutte le informazioni che ho.

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.

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

Versione Docker-Compose

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

Questo è quello che succede se provo a interrompere o avviare il servizio ...

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

Se corro 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

Qualsiasi aiuto sarebbe molto apprezzato. Fammi sapere se potresti aver bisogno di ulteriori informazioni.


1
Per favore, non vandalizzare i tuoi post. Dopo aver pubblicato una domanda, hai concesso in licenza il contenuto alla community di Stack Overflow in generale (con la licenza CC-by-SA). Se desideri dissociare questo post dal tuo account, vedi Qual è il percorso corretto per una richiesta di dissociazione? .
Bugs

Risposte:


269

Ho avuto lo stesso errore, dopo 15 minuti di debug. Si scopre che tutto ciò di cui ha bisogno è un sudo:) Dai un'occhiata a [Crea un gruppo Docker] qui https://docs.docker.com/engine/installation/linux/ubuntulinux/ per sbarazzarti del prefisso sudo.


35
Hanno bisogno di un errore migliore = / Questa domanda ha 13.000 visualizzazioni
Jonathan

4
amico, hai risparmiato circa 30 ore solo per coloro che hanno votato e probabilmente è solo l'1% del tempo che hai risparmiato davvero
vak

5
la vera soluzione è creare il gruppo docker, mentre sudosecondo me è solo una soluzione alternativa / hack. poiché la parte che crea il gruppo non è spiegata qui, viene fornito solo un collegamento e il contenuto di quel collegamento è cambiato, lo considero una risposta di solo collegamento, ed ora è essenzialmente inutile (per la parte di correzione reale). potresti forse aggiungere la descrizione di come aggiungere quel gruppo?
hoijui

2
Penso che sudosia anche una cattiva idea. Consulta i documenti Docker per la gestione di Docker come utente non root: docs.docker.com/engine/installation/linux/linux-postinstall/…
jwhitlock

6
Fondamentalmente, tutto ciò che devi fare è sudo usermod -aG docker $USER, e funzionerà in seguito.
user2340939

65

Ho avuto questo problema e non volevo rovinare le cose usando sudo. Durante le indagini, ho cercato di ottenere alcune informazioni:

docker info

Sorprendentemente, ho avuto il seguente errore:

Autorizzazione negata durante il tentativo di connessione al socket del daemon Docker su unix: ///var/run/docker.sock: Ottieni http: ///var/run/docker.sock/v1.38/info : dial unix / var /run/docker.sock: connessione: autorizzazione negata

Per qualche motivo non avevo privilegi sufficienti, il seguente comando ha risolto il mio problema:

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

Et voilà !


Che ne dici di riavviare nuovamente la finestra mobile? Dobbiamo fare di nuovo questo chown?
Light

No, dovrebbe funzionare quando riavvii Docker. Ma non sono sicuro di cosa succede se riavvii la macchina.
madjaoue

Per impostazione predefinita, Docker rimarrebbe docker.sockcon un gruppo non root, dockercome impostazione predefinita. Ma potremmo cambiarlo tramite -Gflag durante l'avvio del daemon Docker. Nel mio caso, aggiungo un gruppo per $USERNAME, significa aggiungi gruppo docker, quindi riavvio la mia macchina (ubuntu 16.04, PC). Funziona bene. E questo è consigliato nei documenti di docker.
Light

3
Funziona anche per me :)
Kamil J.

27

Sembra che il tuo problema sia stato creato da un vecchio bug di Docker, in cui il file socket non è stato ricreato dopo l'arresto anomalo di Docker. Se questo è il problema, rinominare il file socket dovrebbe consentirne la ricreazione:

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

Poiché questo bug è stato risolto, la maggior parte delle persone che ricevono l'errore Couldn't connect to Docker daemonprobabilmente lo stanno ottenendo perché non fanno parte del dockergruppo e non hanno i permessi per leggere quel file. L'esecuzione di sudo docker ...risolverà questo problema, ma non è un'ottima soluzione.

Docker può essere eseguito come utente non root (senza sudo) che dispone delle autorizzazioni di gruppo appropriate. La documentazione di post-installazione di Linux contiene i dettagli. La versione breve:

$ 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

Ciò consente agli utenti del dockergruppo di eseguire dockere docker-composecomandi senza sudo. Docker stesso esegue una radice, consentendo alcuni attacchi, quindi devi comunque fare attenzione ai contenitori che esegui. Consulta la documentazione sulla sicurezza di Docker per maggiori dettagli.


Questa domanda è specifica per l'installazione di Linux e la correzione comporta modifiche sul sistema host Linux per risolverla. Otterrai informazioni migliori se pubblichi una domanda simile con gli stessi dettagli ma per Windows. Per risolverti, ti consiglio una lettura
attenta della

10

Ho avuto lo stesso problema. Dopo aver preso appunti e analizzato alcuni risultati di debug, finalmente, ho risolto quello che può essere lo stesso errore. Avvia prima il servizio,

service docker start

Non dimenticare di includere il tuo utente nel gruppo docker.


Stavo correndo come root quando ho riscontrato questo errore. Sembrava risolverlo sudoper gli altri -_- Sono contento di scoprire che era davvero questo, che mi ero dimenticato di fare. Così semplice!
Il

8

Dovresti aggiungere il tuo utente al gruppo "docker" con qualcosa come:

sudo usermod -aG docker $ {USER}


5

Ho ricevuto questo errore quando c'erano file nella Dockerfiledirectory che non erano accessibili dall'utente corrente. dockerpotrebbe quindi non caricare il contesto completo sul daemon e ha portato il messaggio " Impossibile connettersi al daemon Docker su http + docker: // localunixsocket ".


2
Grazie! Questo l'ha risolto per me. Facile da controllare, poiché tutti i comandi docker funzionavano, ma docker-compose no. Anche docker-compose ha funzionato in un'altra directory. Messaggio di errore molto fuorviante, BTW.
Csongor Fagyal

1
Questo dovrebbe davvero essere più in alto
Arlen Anderson

1
Grazie! ha funzionato per me. L'utilizzo docker build .produrrà problemi di autorizzazione.
Everyman

L'unica cosa che ha funzionato: perché i messaggi di errore di Docker sono così gravi? Grazie!
coderMe

4

Un modo per risolvere questo problema sarebbe aggiungere prima il tuo utente al dockergruppo eseguendo quanto segue

sudo usermod -aG docker $USER

IMPORTANTE: ricordati di disconnetterti dal tuo sistema (non solo dal tuo terminale) e di nuovo in modo che abbia effetto!


sudo usermod -aG docker $ {USER} Dovremmo anche disconnetterci e accedere per applicare le modifiche: su - $ {USER}
user3785966

3

Dall'output di "ps aux | grep docker", sembra che il demone docker non sia in esecuzione. Prova a utilizzare i metodi seguenti per vedere cosa non va e perché docker non si avvia

  1. Controlla i log del docker

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

  1. Prova ad avviare la finestra mobile in modalità di debug

$ sudo docker -d -D


2

Nel mio caso il tuo servizio docker potrebbe essere interrotto

Comando per avviare il servizio Docker:

$ sudo systemctl start docker

Comando per verificare se si avvia:

$ sudo docker run hello-world


2

Un altro motivo per cui questo errore può essere visualizzato: per me si trattava di una definizione del percorso dell'immagine non valida nel docker-compose.yml:

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

Sembra che sia tutto ok prima, ma mi ero messo sull'ambiente CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/. Apparentemente il //percorso dell'immagine ha causato questo errore.

docker-compose: v.1.21.2
docker: 18.03.1-ce

2

prova con sudo. Sembra un problema di autorizzazione!

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

ha funzionato per me.


1

Ho usato Ubuntu 16.04 e ho riscontrato anche questo problema quando ho usato docker-compose. L'ho risolto eseguendo questo comando.

$ sudo systemctl start docker
$ sudo docker-compose build

1

C'è una leggera possibilità che tu abbia cancellato la macchina predefinita? Ma prima controlla se tutti i file sono presenti (OSX, simile su altri sistemi)

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

Inoltre, installa l'app Docker, poiché è molto più semplice mantenere i contenitori:

brew cask reinstall docker

e avvia l'app Docker dal Finder (attendi fino a quando il servizio non è completamente avviato)

Quindi, controlla l'installazione con:

docker-machine ls

se nell'elenco non sono presenti macchine, crearne una e avviarla:

docker-machine create default
docker-machine start default

Dopo questo, build, compose e tutti gli altri comandi dovrebbero funzionare correttamente.


1

nel mio caso è perché il permesso di ubuntu,

  1. Voce di elenco

controlla l'autorizzazione di

docker info 

se stampano l'autorizzazione per problemi, inserisci qui la descrizione dell'immagine utilizzare

sudo chmod -R 777 /var/run/docker.sock

0

Per me la soluzione era installare una versione più recente (1.24) docker-composedell'utilizzo di questo articolo .

La versione precedente (1.17) è stata installata dal ubunturepository predefinito di, ma dopo aver installato una versione più recente sono riuscito ad avviare il contenitore. Spero che aiuti qualcuno.


0

Penso che sia a causa del diritto di accesso, devi solo scrivere

sudo docker-compose-deps.yml up

-1

Nel mio caso ho lo stesso errore quando provo docker-compose build e la mia soluzione è stata solo aggiungeresudo

sudo docker-compose build

-2

Ho trovato questo e sembrava risolvere il mio problema.

GitHub Fix Docker Daemon Crash

Ho modificato il contenuto del mio file docker-compose-deps.yml come mostrato nel collegamento. Poi ho corso docker-compose -f docker-compose-deps.yml up -d. Poi l'ho cambiato di nuovo e ha funzionato per qualche motivo. Non dovevo continuare i passaggi nel collegamento fornito, ma i primi due passaggi hanno risolto il problema per me.


2
ubuntu 16.04: aggiungi sudo: sudo docker-compose up -d
Moccine

Non è abbastanza come risposta. Se vuoi accettare la tua risposta, devi esporre la vera ragione del tuo problema. Altrimenti, sarebbe un vero fuorviante per gli altri. BTW, ci sono altre risposte qui, hanno aiutato? Dal momento che non ho visto nessun commento da parte tua.
Light
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.