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.
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 ..
.
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).
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 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.
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
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.
Assurez-vous que le démon Docker est en cours d'exécution:
service docker start
Cela l'a corrigé pour moi!
$ docker version
est interne à l'exécutable de Docker et non au démon/service en cours d'exécution.$ 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.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é.
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
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é à docker
group 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.
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)
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`
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
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.
Pour moi, les étapes suivantes ont fonctionné:
docker run hello-world
échoue avec cette erreur comme dans la question, mais l'exécution de Sudo docker run hello-world
a fonctionné.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.
J'ai eu le même problème. Un simple service docker restart
a résolu le problème.
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.
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]#
Assurez-vous qu'il y a
127.0.0.1 localhost
dans ton
`/etc/hosts `
fichier.
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
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.