web-dev-qa-db-fra.com

Est-ce que j'essaie de me connecter à un démon compatible TLS sans TLS?

J'essaie d'en apprendre plus sur Docker , mais je continue à recevoir des messages d'erreur cryptiques (pour moi).

L’exemple le plus simple peut-être est d’essayer d’imprimer la version de Docker que j’ai installée:

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

Je viens de parcourir le guide de l'utilisateur et de suivre chaque étape à la lettre, alors je suis surpris de recevoir ce message ... Que dois-je faire maintenant?

Je viens de remarquer que si je n'utilise pas Sudo je ne reçois pas l'erreur:

$ 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

Bien sûr, ce n’est pas une solution car je pourrais avoir besoin d’utiliser Sudo quelque part sur la route ...

Je viens de trouver une autre page disant "Si vous utilisez OS X, vous ne devriez pas utiliser Sudo." Je ne sais pas s'ils veulent dire seulement pour cet exemple ou en général.

217
Shawn

Pour moi, exécuter $(boot2docker shellinit 2> /dev/null) a résolu le problème.

Cela exécute la sortie de la commande boot2docker shellinit (les trois lignes set -x ...) de votre session de terminal actuelle, ce qui permet à la commande docker de savoir où trouver la machine virtuelle boot2docker.

En ajoutant $(boot2docker shellinit 2> /dev/null) au bas de votre fichier ~/.bash_profile, vous vous assurez que la commande docker est configurée à chaque fois que vous ouvrez votre terminal.


Pour les personnes utilisant Fish Shell: boot2docker shellinit ^ /dev/null | source.


Notez que 2> /dev/null (et l'équivalent poisson ^ /dev/null) sont facultatifs. Comme l'a suggéré @ pablo-fernandez, cela masque les lignes Writing ...

149
mauvm

La même erreur se produisait sous MacOS avec Sudo et sans elle.

Je l'ai résolu avec:

boot2docker start
$(boot2docker shellinit)

P.S .: Merci à Alan. J'ai découvert que cette approche est recommandée dans leur documentation officielle .

P.S.2: Parfois, boot2docker init peut être requis avant d'exécuter deux commandes (merci Aaron).

77
Salvador Dali

Dans mon cas (Linux Mint 17), j’ai fait diverses choses et je ne sais pas lesquelles d’entre elles sont absolument nécessaires.

J'ai inclus les paquets manquants Ubuntu:

$ Sudo apt-get install apparmor lxc cgroup-lite

Un utilisateur a été ajouté au groupe docker:

$ Sudo usermod -aG docker ${USER}

Démon Started (OpenSUSE en a juste besoin)

$ Sudo docker -d

Merci\Attribution


Merci Usman Ismail , parce que c'était peut-être juste la dernière chose ...

Question stupide mais avez-vous démarré le démon docker? - Usman Ismail 17 déc. 14 à 15:04


Merci également à github @ MichaelJCole pour la solution qui a fonctionné pour moi, car je n'ai pas vérifié le démon lorsque j'ai lu le commentaire de Usman.

commentaire 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

Merci à fredjean.net post pour avoir remarqué les paquets manquants et oublier les instructions d’installation par défaut d’Ubuntu et google d’autres moyens

Il s’avère que les packages cgroup-lite et lxc ne sont pas installés par défaut sur Linux Mint. L'installation des deux m'a ensuite permis d'exécuter bash dans l'image de base, puis de construire et d'exécuter mon image.


Merci au commentaire de brettof86 sur openSUSE

54
ElMesa

Le problème souligné est simple - absence d'autorisation à /var/run/docker.sock socket de domaine unix.

De option de socket Daemonchapitre de ligne de commande Docker référence pour Docker 1.6.0: 

Par défaut, un socket de domaine unix (ou IPC) est créé à /var/run/docker.sock, nécessitant une permission root ou un menu fixe appartenance à un groupe.

Les étapes nécessaires pour accorder des droits aux utilisateurs sont bien décrites dans Docker instructions d’installation pour Fedora :

Octroi aux utilisateurs du droit d'utiliser Docker 

L'outil de ligne de commande de docker contacte le processus du démon docker via un fichier de socket /var/run/docker.sock appartenant à root:root. Bien qu'il soit recommandé de utilisez Sudo pour les commandes de menu fixe, si les utilisateurs souhaitent l’éviter, un l'administrateur peut créer un groupe de dockers, le posséder /var/run/docker.sock et ajoutez des utilisateurs à ce groupe.

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

Déconnectez-vous et reconnectez-vous pour que les modifications ci-dessus prennent effet .. Veuillez noter que les packages Docker de certaines distributions Linux (Ubuntu) placent déjà /var/run/docker.sock dans le groupe docker, rendant les deux premières étapes ci-dessus inutiles.

Sous OS X et boot2docker, la situation est différente. le démon Docker s'exécute dans une VM, la variable d'environnement DOCKER_Host doit donc être définie sur cette VM pour que le client Docker puisse trouver le démon Docker. Ceci est fait en exécutant $(boot2docker shellinit) dans le shell.

48
Piotr Dobrogost

Assurez-vous que le démon Docker est en cours d'exécution:

service docker start

Cela l'a corrigé pour moi!

21
superlogical
  1. Docker s’appelle lui-même un environnement d’exécution autonome pour les conteneurs Linux . En termes simples, il agit à la fois comme serveur et client.
  2. La requête de commande $ docker version est interne à l'exécutable de Docker et non au démon/service en cours d'exécution.
  3. $ docker images or $ docker ps or $ docker pull centos sont des commandes qui envoient des requêtes au démon/service docker en cours d'exécution.
  4. Docker prend en charge par défaut les connexions TLS à son démon/service.
  5. Seulement si l'utilisateur avec lequel vous êtes connecté fait partie du groupe d'utilisateurs docker ou si vous avez utilisé Sudo avant la commande, par exemple. $ Sudo docker images, ne nécessite-t-il pas la connectivité TLS?.

Visitez la page de documentation de Docker Protégez le socket du démon Docker.

Faites défiler un peu vers le haut et trouvez warning section pour plus de clarté.

14
Yogesh Kamat

Vous devrez faire:

$boot2docker init
$boot2docker start

Les paramètres suivants ont résolu le problème:

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

Il est possible que vous n’ayez pas encore l’autorisation pour le fichier . Cela m’est arrivé après que je me suis ajouté à dockergroup en utilisant 

Sudo gpasswd -a user docker

mais pas encore déconnecté.

Pour résoudre ce problème, vous pouvez vous reconnecter ou utiliser sg docker "docker <subcommand> ..." avant de vous déconnecter.

Si vous êtes dans le groupe docker dans /etc/group, vous devriez pouvoir l'exécuter sans taper le mot de passe.

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-enabled-daemon-without-tls/

10
Ding-Yi Chen

Sous Ubuntu après l’installation de lxc-docker , vous devez ajouter votre utilisateur au groupe docker user:

Sudo usermod -a -G docker myusername

Ceci est dû aux autorisations du fichier de socket:

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

NE LANCEZ PAS usermod SANS "-a" comme suggéré dans l'un des autres commentaires, sinon cela effacera les paramètres de groupe supplémentaires et laissera simplement le groupe "docker".

C'est ce qui se passera:

➜  ~  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
Pawel Barcik

TLDR: Cela a permis à mon groupe de rencontres Python de résoudre ce problème lorsque je gérais une clinique d'installation de docker et que la plupart des utilisateurs utilisaient OS X:

boot2docker init
boot2docker up

lancez les commandes export que la sortie vous donne, puis

docker info

devrait vous dire que cela fonctionne.


Le contexte (ce qui nous a amené au problème)

J'ai dirigé une clinique sur l'installation de docker et la plupart des participants étaient sous OS X. Nous avons rencontré ce problème et je l'ai surmonté sur plusieurs machines. Voici les étapes que nous avons suivies:

D'abord, nous avons installé homebrew (oui, certains participants ne l'avaient pas):

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

Ensuite, nous avons eu cask, que nous utilisions pour installer virtualbox, puis brassé pour installer docker et boot2docker (tous requis pour OS X) N'utilisez pas Sudo pour infuser. :

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

La solution

C'est à ce moment-là que nous avons rencontré le problème rencontré par le demandeur. Ce qui suit l'a corrigé. Je comprends que init était un contrat unique, mais vous devrez probablement exécuter up à chaque démarrage du menu fixe:

boot2docker init
boot2docker up

Ensuite, lorsque up a été exécuté, il donne plusieurs commandes export. Copier-coller et exécuter ceux-ci.

Enfin, docker info devrait vous dire qu'il est correctement installé. 

À la démo

Le reste des commandes devrait en faire la démonstration. (Sur Ubuntu Linux, j'avais besoin de Sudo.)

docker run hello-world
docker run -it ubuntu bash

Ensuite, vous devriez être sur une racine Shell dans le conteneur:

apt-get install nano
exit

Revenons à votre utilisateur natif bash:

docker ps -l

Recherchez l'identifiant hexadécimal (0-9 ou a-f) d'environ 12 chiffres sous "ID du conteneur", par exemple. 456789abcdef. Vous pouvez ensuite valider votre changement et lui attribuer un nom descriptif, tel que descriptivename:

docker commit 456789abcdef descriptivename`
5
Aaron Hall

Tout ce dont vous avez besoin pour exécuter Docker sous Linux Ubuntu/Mint:

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

Facultativement, vous devrez peut-être installer deux dépendances supplémentaires si cela ne fonctionne pas:

Sudo apt-get -y install apparmor cgroup-lite
Sudo service docker restart
3
tomrozb

J'ai essayé les solutions ici, et boot2docker ne fonctionnait pas.

Ma solution: Désinstallez boot2docker sur le Mac, installez Centos 7 VM dans VirtualBox et travaillez avec Docker dans cette VM.

2
MondKin

Pour moi, les étapes suivantes ont fonctionné:

  1. J'ai remarqué que l'exécution de docker run hello-world échoue avec cette erreur comme dans la question, mais l'exécution de Sudo docker run hello-world a fonctionné.
  2. J'ai ajouté mon utilisateur actuel au groupe docker, Sudo adduser user docker. Ensuite, vous devez redémarrer votre ordinateur ou utiliser su - user (utilisez la commande groups si vous vous trouvez dans le groupe docker).

Après cela, hello-world a commencé à fonctionner.

Ma réponse est basée sur Comment utiliser docker sans sudo? qui explique ce qui ne va pas.


2
csharpfolk

J'ai eu le même problème. Un simple service docker restart a résolu le problème.

1
ChaitanyaBhatt

Pour ce qu'il vaut, j'ai essayé toutes les solutions de cette question et de cette question connexe et aucune n'a résolu mon problème avant d'avoir désinstallé et réinstallé VirtualBox . Ce processus a mis à niveau la VirtualBox de la version 4.2.16 à la version 4.3.22 (la précédente était restée inutilisée sur le système pendant quelques mois).

Ensuite, boot2docker et docker ont fonctionné sans autre ajustement.

1
gauden

J'ai rencontré le même problème lorsque je créais des images Docker à partir de Jenkins. Ajoutez simplement l'utilisateur au groupe docker, puis redémarrez les services Docker. Dans mon cas, je devais redémarrer les services Jenkins.

C'est l'erreur que j'ai eu:

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]#
0
Avinash Singh

Assurez-vous qu'il y a

127.0.0.1    localhost

dans ton 

`/etc/hosts `

fichier.

0
bolerovt

Le démon Docker se lie à un socket Unix au lieu d’un port TCP. Par défaut, ce socket Unix appartient à l'utilisateur root et les autres utilisateurs ne peuvent y accéder qu'à l'aide de Sudo. Le démon Docker s'exécute toujours en tant qu'utilisateur root.

Sudo groupadd docker
Sudo usermod -aG docker $USER

Déconnectez-vous et reconnectez-vous pour que votre appartenance à un groupe soit réévaluée.

docker run hello-world

Source: Gérer Docker en tant qu’utilisateur non root

0
Shabbir Bata

J'ai eu le même problème et j'ai essayé diverses choses pour résoudre ce problème: modifier le fichier .bash_profile, me connecter et se déconnecter sans aucune chance. En fin de compte, le redémarrage de ma machine a corrigé le problème.

0
DavB