web-dev-qa-db-fra.com

n'a pas pu démarrer dockerd après avoir installé docker avec snap

Je suis en cours d'exécution 16.04 (distro = Ubuntu 16.04.1 LTS et noyau = 4.4.0-45-generic) et installé docker par la capture de docker.

snap install docker

et voici ma liste instantanée.

# snap list
Name               Version   Rev  Developer  Notes
docker             1.11.2-9  56   canonical  -
snapstore-example  0.3       4    noise      -
ubuntu-core        16.04.1   423  canonical  -

mais je n'ai pas pu démarrer le démon docker. ce que j'ai fait

systemctl start snap.docker.dockerd.service

Le journal des erreurs semble être avec permission.

Nov 30 00:54:20 ubuntu-xenial systemd[1]: Started Service for snap application docker.dockerd.
Nov 30 00:54:20 ubuntu-xenial snap[19148]: grep: /proc/self/mountinfo: Permission denied
Nov 30 00:54:20 ubuntu-xenial snap[19148]: time="2016-11-30T00:54:20.708894420Z" level=fatal msg="can't create unix socket /var/run/docker.sock: permission denied"
Nov 30 00:54:20 ubuntu-xenial systemd[1]: snap.docker.dockerd.service: Main process exited, code=exited, status=1/FAILURE
Nov 30 00:54:20 ubuntu-xenial systemd[1]: snap.docker.dockerd.service: Unit entered failed state.
Nov 30 00:54:20 ubuntu-xenial systemd[1]: snap.docker.dockerd.service: Failed with result 'exit-code'.
Nov 30 00:54:20 ubuntu-xenial systemd[1]: snap.docker.dockerd.service: Service hold-off time over, scheduling restart.
Nov 30 00:54:20 ubuntu-xenial systemd[1]: Stopped Service for snap application docker.dockerd.
Nov 30 00:54:20 ubuntu-xenial systemd[1]: snap.docker.dockerd.service: Start request repeated too quickly.
Nov 30 00:54:20 ubuntu-xenial systemd[1]: Failed to start Service for snap application docker.dockerd.

et cette erreur pour être plus spécifique.

Nov 30 00:54:20 ubuntu-xenial snap[19148]: time="2016-11-30T00:54:20.708894420Z" level=fatal msg="can't create unix socket /var/run/docker.sock: permission denied"

tandis que si je fais apt-get install docker.io et essaie de démarrer docker.service avec systemctl start docker.service. ça a bien fonctionné.

un problème connu avec le docker snap? ou ai-je manqué une étape. Merci!

3
Xin Ma

après un premier dépannage. J'ai pu trouver le RC moi-même. il semble qu'apparmor ait bloqué à la fois grep: /proc/self/mountinfo et la création d'un socket dans /var/run/docker.sock

syslog.1:Nov 30 02:18:27 ubuntu-xenial kernel: [ 5359.923039] audit: type=1400 audit(1480472307.476:349): apparmor="DENIED" operation="open" profile="snap.docker.dockerd" name="/proc/19448/mountinfo" pid=19448 comm="umount" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
syslog.1:Nov 30 02:18:27 ubuntu-xenial kernel: [ 5359.923053] audit: type=1400 audit(1480472307.476:350): apparmor="DENIED" operation="open" profile="snap.docker.dockerd" name="/proc/19448/mounts" pid=19448 comm="umount" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
syslog.1:Nov 30 02:38:28 ubuntu-xenial kernel: [ 6560.900141] audit: type=1400 audit(1480473508.452:362): apparmor="DENIED" operation="connect" profile="snap.docker.docker" name="/run/docker.sock" pid=20591 comm="docker" requested_mask="wr" denied_mask="wr" fsuid=0 ouid=0

Mais pourquoi est-ce. pourquoi 16.04 a reçu le profil par défaut apparmor (dans /var/lib/snapd/apparmor/profiles/snap.docker.docker) qui empêcherait le démon dockerd de démarrer.

1
Xin Ma

Je pense que vous utilisez snapd 2.16ubuntu3, qui est actuellement disponible dans 16.04. Vous pouvez vérifier avec:

$ apt-cache policy snapd

Si tel est le cas, le problème est que les interfaces du menu fixe ne sont pas connectées lors de l'installation. Par défaut, certaines des interfaces de capture pour docker ne se connectent pas automatiquement, mais les déclarations de capture du magasin peuvent être utilisées pour les connecter automatiquement. Nous avons des déclarations instantanées pour que docker connecte automatiquement les interfaces, mais 2.16ubuntu3 ne sait pas encore comment les utiliser. Vous avez deux choix:

  1. installez le snapd de xenial-proposé: https://launchpad.net/ubuntu/+source/snapd/2.17.1ubuntu1

  2. connecter manuellement les interfaces. Par exemple:

$ snap interfaces |grep docker # show the disconnected interfaces
docker:docker-daemon     -
:docker-support          -
:home                    docker
:network                 docker
:network-bind            docker
-                        docker:docker-cli
-                        docker:firewall-control
-                        docker:privileged
-                        docker:support

# connect the interfaces
$ Sudo snap connect docker:support ubuntu-core:docker-support
$ Sudo snap connect docker:firewall-control ubuntu-core:firewall-control
$ Sudo snap connect docker:docker-cli docker:docker-daemon

$ snap interfaces | grep docker # show the connected interfaces
docker:docker-daemon     docker:docker-cli
:docker-support          docker:support
:firewall-control        docker
:home                    docker
:network                 docker
:network-bind            docker
-                        docker:privileged

# restart the daemon
$ Sudo service snap.docker.dockerd stop
$ Sudo service snap.docker.dockerd start

# verify it worked
$ Sudo docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
...

Si vous souhaitez utiliser des conteneurs à privilèges Docker, connectez cette interface avec:

$ Sudo snap connect docker:privileged ubuntu-core:docker-support

Si vous ne souhaitez pas utiliser 'Sudo', créez le groupe de dockers et ajoutez-y vous-même:

$ Sudo addgroup docker
$ Sudo adduser `id -un` docker
$ newgrp docker

# restart docker so it will make the socket group writable by 'docker'
$ Sudo service snap.docker.dockerd stop
$ Sudo service snap.docker.dockerd start

$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
...

Vous pouvez obtenir plus d'informations sur les interfaces Snappy ici: https://github.com/snapcore/snapd/wiki/Interfaces

Comme mentionné, les commandes 'snap connect' ne seront plus nécessaires dès que snapd 2.17 ou version ultérieure sera installé. Il est également prévu sur la feuille de route de prendre en charge de manière native les groupes du système afin que vous n'ayez pas à ajouter le groupe au système vous-même.

1
Jamie Strandboge