falhou ao iniciar o dockerd depois de instalar o docker com snap

3

Estou executando 16.04 (distro = Ubuntu 16.04.1 LTS e kernel = 4.4.0-45-generic ) e instalei a janela de encaixe pelo snap docker.

snap install docker

e aqui está minha lista de snap.

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

mas não consegui iniciar o daemon do docker. o que eu fiz

systemctl start snap.docker.dockerd.service

O log de erros parece estar com permissão.

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.

e esse erro é mais específico.

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"

enquanto eu faço apt-get install docker.io e tento iniciar o docker.service com systemctl start docker.service . funcionou bem.

algum problema conhecido com o snap docker? ou eu perdi qualquer passo. obrigado!

    
por Xin Ma 30.11.2016 / 02:53

2 respostas

1

após alguns problemas iniciais. Eu fui capaz de encontrar o RC eu mesmo. parece que parece estar bloqueado tanto grep: /proc/self/mountinfo quanto criando socket em /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

Mas porque é isso? por que o 16.04 obteve o perfil apparmor padrão enviado (em /var/lib/snapd/apparmor/profiles/snap.docker.docker ) que bloquearia o daemon dockerd de iniciar.

    
por Xin Ma 01.12.2016 / 20:32
1

Eu suspeito que você esteja executando snapd 2.16ubuntu3, que é o que está atualmente disponível no 16.04. Você pode verificar com:

$ apt-cache policy snapd

Se esse for o caso, o problema é que as interfaces do docker não estão conectadas na instalação. Por padrão, algumas das interfaces instantâneas da janela de encaixe não se conectam automaticamente, mas as declarações de encaixe da loja podem ser usadas para conectá-las automaticamente. Temos declarações de snap para o docker para conectar automaticamente as interfaces, mas o 2.16ubuntu3 ainda não sabe como usá-las. Você tem duas escolhas:

  1. instale o snapd do xenial-proposed: link

  2. conecte manualmente as interfaces. Por exemplo:

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

Se você quiser usar contêineres com privilégios do docker, conecte essa interface com:

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

Se você não quiser usar o 'sudo', crie o grupo de encaixe e adicione-se a ele:

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

Você pode obter mais informações sobre interfaces instantâneas aqui: link

Como mencionado, os comandos 'snap connect' não serão necessários assim que o snapd 2.17 ou superior estiver instalado. Também está no roteiro para dar suporte a grupos de sistemas de forma nativa, para que você não tenha que adicionar o grupo ao sistema.

    
por Jamie Strandboge 02.12.2016 / 18:26