Sto cercando di connettermi a un demone abilitato per TLS senza TLS?


221

Sto cercando di conoscere Docker , ma continuo a ricevere messaggi di errore criptici (per me).

Forse l'esempio più semplice di ciò sta provando a stampare la versione di Docker che ho installato:

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

Ho appena consultato la guida per l' utente e seguito esattamente ogni passaggio, quindi sono sorpreso di ricevere questo messaggio ... Cosa devo fare ora?

Ho appena notato che se non uso sudonon ottengo l'errore:

$ 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

Naturalmente, questa non è una soluzione in quanto potrebbe essere necessario utilizzare sudoda qualche parte in fondo alla strada ...

Ho appena trovato un'altra pagina che dice " Se stai usando OS X, allora non dovresti usare sudo". Non so se significano solo per quell'esempio, o in generale.


38
Domanda stupida ma hai avviato il demone docker?
Usman Ismail il

Ho seguito la guida per l'utente, quindi sì, credo che il daemon docker sia avviato. Come posso ricontrollare?
Shawn,

5
In realtà hai trovato la soluzione. Con boot2docker non avrai mai bisogno di sudo con Linux, avrai sempre bisogno di sudo. Questo perché boot2docker esegue effettivamente quei comandi in una scatola virtuale che è configurata per accedere correttamente al demone.
Usman Ismail il

1
Stavo lottando con questo problema e funzionante, senza sudo lavorato per me
SAK

6
Quasi tutte le risposte sono specifiche di OS X (citano boot2docker) sebbene OS X non sia esplicitamente menzionato nella domanda o nei tag. Se qualcuno è interessato alla risposta generica, vedere la mia risposta.
Piotr Dobrogost,

Risposte:


150

Per me, correre $(boot2docker shellinit 2> /dev/null)risolto il problema.

Ciò esegue l'output del boot2docker shellinitcomando (le tre set -x ...righe) nella sessione del terminale corrente, che consente al dockercomando di sapere dove trovare la macchina virtuale boot2docker.

L'aggiunta $(boot2docker shellinit 2> /dev/null)alla fine del ~/.bash_profilefile assicurerà che il dockercomando sia configurato, ogni volta che si apre il terminale.


Per le persone che utilizzano shell Pesce: boot2docker shellinit ^ /dev/null | source.


Nota che 2> /dev/null(e l'equivalente di Fish ^ /dev/null) sono opzionali. Come suggerito da @ pablo-fernandez, questo nasconde le Writing ..linee.


L'avevo già fatto, ma lo aggiungerò a .bash_profile, buona idea
Shawn,

sicuramente aiuta con boot2docker 1.5, ma un vecchio boot2docker 1.2 non lo ha fatto correttamente
Max Markov

1
Ho aggiunto un reindirizzamento standard in modo che le istruzioni "Writting ..." non vengano visualizzate: $ (boot2docker shellinit 2> / dev / null)
Pablo Fernandez,

3
Grazie per menzionare il guscio di pesce! Risolto il problema per me
Cyrillk,

1
Come menzionato nella risposta di Salvador Dalì di seguito, assicurati di correre anche boot2docker startprima di eseguire la shell init.
Kevin,

78

Stavo ottenendo lo stesso errore su MacOS con sudo e senza di esso.

L'ho risolto con:

boot2docker start
$(boot2docker shellinit)

PS: Grazie ad Alan. Ho scoperto che questo approccio è raccomandato nella loro documentazione ufficiale .

PS2: a volte boot2docker initpuò essere richiesto prima di eseguire due comandi (grazie Aaron).


Funzionava, ma non capisco perché? cosa sta facendo $ (boot2docker shellinit)?
Emile,

Funzionava in Mac OS X ma ho la stessa domanda di Emile, ovvero perché ha funzionato?
Nissan,

Questo non ha funzionato per me su Mac OSX 10.10.4 con Docker Tools.
b01,

Ho dovuto non solo eseguire boot2docker shellinit, ma anche copiare ed eseguire ciascuno dei comandi visualizzati. La documentazione ufficiale tramite il link dice che questo comando mostra solo l'insieme richiesto di comandi
Vitaliy Lebedev

Ha funzionato anche per me su una macchina Windows.
Noushad,

55

Nel mio caso (Linux Mint 17) ho fatto varie cose e non sono sicuro di quali di queste siano totalmente necessarie.

Ho incluso i pacchetti mancanti di Ubuntu:

$ sudo apt-get install apparmor lxc cgroup-lite

Un utente è stato aggiunto al gruppo docker:

$ sudo usermod -aG docker ${USER}

Demone avviato (openSUSE ha solo bisogno di questo)

$ sudo docker -d

Grazie \ Attribuzione


Grazie Usman Ismail , perché forse era solo l'ultima cosa ...

Domanda stupida ma hai avviato il demone docker? - Usman Ismail il 17 dicembre 14 alle 15:04


Grazie anche a github @ MichaelJCole per la soluzione che ha funzionato per me, perché non ho controllato il demone quando ho letto il commento di Usman.

Commento di 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

Grazie a fredjean.net post per aver notato i pacchetti mancanti e dimenticare le istruzioni di installazione di Ubuntu predefinite e google su altri modi

Si scopre che i pacchetti cgroup-lite e lxc non sono installati di default su Linux Mint. L'installazione di entrambi mi ha permesso di eseguire bash nell'immagine di base e quindi creare ed eseguire la mia immagine.


Grazie al commento di brettof86 su openSUSE


2
Grazie! Nel mio caso (Menta 17.1) mancava l'apparmatore.
Alexandre L Telles,

2
Mi aggiungendo al gruppo scaricatore ha fatto la cosa giusta per me, sudo adduser $USER docker. Il trucco per rendere effettivo l'attuale shell è stato curgroup=$(id -gn) && newgrp docker && newgrp $curgroupadattato da superuser.com/questions/272061/…
Tero Tilus,

1
Immagino che questo abbia un punteggio molto più basso è perché più persone usano OS X di Linux? Sto usando Ubuntu 14.04 e funziona per me.
acqua ghiacciata,

1
openSUSE e io
dovevamo

Scusa la mia ignoranza riguardo alla docker-machine, ma non lo so. Ma se lo scopri, ti preghiamo di segnalarlo qui nei commenti o di modificare la risposta. : D
ElMesa,

49

Il problema di sottolineatura è semplice: mancanza di autorizzazione per /var/run/docker.sockunificare il socket di dominio.

Dal capitolo sull'opzione socket Daemon del riferimento della riga di comando di Docker per Docker 1.6.0:

Per impostazione predefinita, viene creato un socket di dominio unix (o socket IPC) /var/run/docker.sock, che richiede l'autorizzazione di root o l'appartenenza al gruppo docker .

I passaggi necessari per concedere i diritti agli utenti sono ben descritti nelle istruzioni di installazione Docker per Fedora :

Concessione dei diritti agli utenti di utilizzare Docker

Lo strumento da riga di comando docker contatta il processo daemon docker tramite un file socket di /var/run/docker.sockproprietà di root:root. Sebbene si consiglia di utilizzare sudo per i comandi docker, se gli utenti desiderano evitarlo, un amministratore può creare un gruppo docker, averne uno proprio /var/run/docker.socke aggiungere utenti a questo gruppo.

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

Disconnettersi e riconnettersi per rendere effettive le modifiche sopra riportate. Si noti che i pacchetti Docker di alcune distribuzioni Linux (Ubuntu) fanno già parte /var/run/docker.sockdel dockergruppo rendendo non necessari i primi due dei passaggi precedenti.

Nel caso di OS X e boot2dockerla situazione è diversa; il daemon Docker viene eseguito all'interno di una macchina virtuale, quindi la DOCKER_HOSTvariabile di ambiente deve essere impostata su questa macchina virtuale in modo che il client Docker possa trovare il daemon Docker. Questo viene eseguito eseguendo $(boot2docker shellinit)nella shell.


1
Hmm, la mia situazione è simile ma leggermente diversa. Sono in esecuzione su Ubuntu 14.04. Docker apparentemente installato correttamente (inserendo solo "docker" viene visualizzato l'elenco dei comandi). Ho creato un gruppo docker e ne ho reso membro il mio utente. Questo è solo un sistema domestico e sto solo giocando con la finestra mobile. Tuttavia, qualsiasi cosa diversa da "docker" solleva l'errore. Ci credo perché la finestra mobile non può creare /var/run/docker.sock. Sul mio sistema / var / run c'è un link simbolico a / run che è root: root e 755 perm, quindi docker non può scrivere lì. Non sono sicuro di quale sarebbe la mia soluzione a questo.
Steve Cohen,

Piotr, questa spiegazione è molto utile. Canyou ha spiegato perché "$ (boot2docker shellinit)" funziona, ma il semplice "boot2docker shellinit" non funziona? Capisco che le parentesi implicano l'esecuzione in una subshell, ma non sono stato in grado di capire perché sia ​​necessario per far funzionare correttamente la finestra mobile quando nessuno degli altri comandi lo richiede ....
Alex Edelstein

@AlexEdelstein La differenza tra boot2docker shellinite altri comandi è che questo comando non effettua alcuna modifica ma genera solo (stampa) comandi che devi eseguire da solo. È possibile eseguire boot2docker shellinitprima e quindi copiare ed eseguire manualmente ciascun comando dal suo output. È più semplice eseguire tutti i comandi eseguendo boot2docker shellinitun sottoprocesso (con $()sintassi) perché in questo modo ogni riga di output viene automaticamente eseguita come comando shell. Vedi docs.docker.com/installation/mac/#from-your-command-line dove è mostrato in dettaglio.
Piotr Dobrogost,

@SteveCohen È possibile che si desideri verificare che il servizio docker sia in esecuzione sudo service docker status. Sul mio Ubuntu 14.04 non era in esecuzione dopo l'installazione, il che ha causato l'errore.
razz0,

1
Grazie per aver collegato la documentazione effettiva per la causa principale, risolto il mio problema
RonaldFindling

23

Assicurarsi che il daemon Docker sia in esecuzione:

service docker start

Questo mi ha risolto!


sudo service docker startper me
Milimetric,

systemctl enable docker.servicee systemctl start docker.service per gli utenti di system.d linux (Arch nel mio caso)
PRDeving

sudo service docker restartper me
Frozen Flame,

15
  1. Docker si definisce un runtime autosufficiente per i contenitori Linux. In termini semplici agisce sia come server che come client.
  2. La $ docker versionquery di comando è interna all'eseguibile Docker e non al daemon / servizio in esecuzione.
  3. $ docker images or $ docker ps or $ docker pull centos sono comandi che inviano query al daemon / servizio docker in esecuzione.
  4. Docker per impostazione predefinita supporta le connessioni TLS al suo demone / servizio.
  5. Solo se l'utente a cui si è effettuato l'accesso fa parte del gruppo utenti dockero è stato utilizzato sudoprima del comando, ad esempio $ sudo docker images, non richiede la connettività TLS.

Visita la pagina della documentazione di Docker Proteggi il socket del demone Docker .

Scorri un po 'verso l'alto e trova la warning sectionchiarezza.


1
Le risposte popolari finora si applicano solo a OS X mentre questo è molto più generale, spiega la causa e mi ha permesso di risolverlo su GNU / Linux.
sinisterstuf,

1
@laffuste il tuo comando WIPE GRUPPI AGGIUNTIVI DELL'UTENTE. a causa della "-a" mancante
Pawel Barcik,

3
@PawelBarcik terribile errore, grazie:sudo usermod -a -G docker {username}
laffuste il

1
In che modo questa risposta risponde alla domanda? Qual è la ragione dell'errore? Come sistemarlo? (Non sono su OS X, quindi le risposte esistenti non si applicano).
Piotr Dobrogost,

13

Dovrai fare:

$boot2docker init
$boot2docker start

Le seguenti impostazioni hanno risolto il problema:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

1
Questo comando può anche essere usato per impostare le variabili d'ambiente (piuttosto che farlo manualmente):eval "$(boot2docker shellinit)"
Potenzia il

11

È possibile che tu non abbia ancora il permesso per il file. Mi è successo dopo essermi aggiunto al dockergruppo usando

sudo gpasswd -a user docker

ma non ancora disconnettersi.

Per risolvere il problema, è possibile ripetere il login o utilizzare sg docker "docker <subcommand> ..."prima di disconnettersi.

Se siete in gruppo docker in /etc/group, si dovrebbe essere in grado di eseguire senza la password di battitura.

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-abilitati-daemon-senza-TLS /


7

Su Ubuntu dopo l'installazione di lxc-docker è necessario aggiungere l'utente al gruppo utenti docker :

sudo usermod -a -G docker myusername

Ciò è dovuto alle autorizzazioni del file socket:

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

NON ESEGUIRE usermod SENZA "-a" come suggerito in uno degli altri commenti o cancellerà l'impostazione dei gruppi aggiuntivi e lascerà semplicemente il gruppo "finestra mobile"

Questo è ciò che accadrà:

➜  ~  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)

6

TLDR : Questo ha portato il mio gruppo Meetup Python a superare questo problema quando stavo eseguendo una clinica durante l'installazione di docker e la maggior parte degli utenti erano su OS X:

boot2docker init
boot2docker up

eseguire quindi i exportcomandi che l'output ti dà

docker info

dovrei dirti che funziona.


Il contesto (cosa ci ha portato al problema)

Ho guidato una clinica sull'installazione della finestra mobile e la maggior parte dei partecipanti aveva OS X, e abbiamo riscontrato questo problema e l'ho superato su più macchine. Ecco i passaggi che abbiamo seguito:

Innanzitutto, abbiamo installato homebrew (sì, alcuni partecipanti non ce l'avevano):

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

Poi abbiamo cask, che abbiamo usato per installare virtualbox, e poi abbiamo usato brew per installare docker e boot2docker (tutti necessari per OS X). Non usare sudo per brew. :

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

La soluzione

Fu allora che ci imbattemmo nel problema colui che domandava qui. Ciò che segue è stato risolto. Capisco che initera un affare una tantum, ma probabilmente dovrai correre upogni volta che avvii la finestra mobile:

boot2docker init
boot2docker up

Quindi, quando upè stato eseguito, dà diversi exportcomandi. Copia e incolla quelli.

Infine, docker infodovresti dirti che è installato correttamente.

Alla demo

Il resto dei comandi dovrebbe dimostrarlo. (su Ubuntu Linux ho richiesto sudo.)

docker run hello-world
docker run -it ubuntu bash

Quindi dovresti trovarti su una shell di root nel contenitore:

apt-get install nano
exit

Torna alla tua bash utente nativo:

docker ps -l

Cerca l'identificatore esadecimale di circa 12 cifre (0-9 o af) in "ID contenitore", ad es 456789abcdef. È quindi possibile eseguire il commit della modifica e denominarla con un nome descrittivo, come descriptivename:

docker commit 456789abcdef descriptivename`

5

Tutto il necessario per eseguire Docker su Linux Ubuntu / Mint:

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

Facoltativamente, potrebbe essere necessario installare due dipendenze aggiuntive se quanto sopra non funziona:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart

1
Mi darei +1 se fosse possibile - Stavo cercando una soluzione e ho trovato la mia soluzione di cui mi ero dimenticato :)
tomrozb

Questo mi ha aiutato. Mi sono reso conto che il servizio docker non era in esecuzione dopo l'installazione, quindi sudo service docker startho risolto il problema sul mio Ubuntu 14.04.
razz0,

3

Ho provato le soluzioni qui e boot2docker non ha funzionato.

La mia soluzione: disinstallare boot2docker sul Mac, installare una VM Centos 7 in VirtualBox e lavorare con Docker all'interno di quella VM.


3

Per me i seguenti passaggi hanno funzionato:

  1. Ho notato che la corsa docker run hello-worldfallisce con questo errore calato come nella domanda, ma la corsa ha sudo docker run hello-worldfunzionato.
  2. Ho aggiunto il mio attuale utente al dockergruppo sudo adduser user docker,. Quindi è necessario riavviare il computer o utilizzare su - user(verificare utilizzando il groupscomando se si trovano nel dockergruppo).

Successivamente, ha hello-worldiniziato a funzionare.

La mia risposta si basa su Come posso usare la finestra mobile senza sudo? che spiega cosa non va.



Dopo aver aggiunto self al gruppo, fai `newgrp docker; newgrp primary-group crea una subshell, con un nuovo gruppo primario di finestra mobile, quindi ristabilisce il gruppo primario corretto. (Un po 'di un trucco).
ctrl-alt-delor

2

Per quello che vale, ho provato tutte le soluzioni in questa domanda e in questa domanda correlata e nessuna ha risolto il mio problema fino a quando non ho disinstallato e reinstallato VirtualBox . Questo processo ha aggiornato VirtualBox dalla versione 4.2.16 alla 4.3.22 (la mia precedente era rimasta inutilizzata sul sistema per alcuni mesi).

Poi boot2dockere dockerha lavorato senza altri aggiustamenti.


2

Ho avuto lo stesso problema. Un semplice service docker restartrisolto il problema.


2

Il daemon Docker si collega a un socket Unix anziché a una porta TCP. Per impostazione predefinita, il socket Unix è di proprietà dell'utente root e gli altri utenti possono accedervi solo tramite sudo. Il daemon Docker viene sempre eseguito come utente root.

sudo groupadd docker
sudo usermod -aG docker $USER

Disconnettersi e riconnettersi in modo da rivalutare l'appartenenza al gruppo.

docker run hello-world

Fonte: Gestisci Docker come utente non root


1

Ho avuto lo stesso problema e ho provato varie cose per risolvere questo problema, modificando il file .bash_profile, eseguendo il login e il logout, senza alcuna fortuna. Alla fine, il riavvio della mia macchina l'ha risolto.


0

Assicurati che ci sia

127.0.0.1    localhost

nel tuo

`/etc/hosts `

file.


0

Ho riscontrato lo stesso problema durante la creazione di immagini Docker da Jenkins. Basta aggiungere l'utente al dockergruppo e quindi riavviare i servizi Docker e nel mio caso ho dovuto riavviare i servizi Jenkins.

Questo è stato l'errore che ho ricevuto:

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]#

-1

Un altro possibile motivo è che la visualizzazione della CPU del BIOS non è abilitata. Vai e abilitalo prima!

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.