76 votes

Les conteneurs Docker ne peuvent pas être arrêtés ou supprimés - autorisation refusée Erreur

Question: ne Peut pas arrêter les conteneurs docker, chaque fois que j'essaie d'arrêter de conteneurs j'obtiens le message d'Erreur suivant

ERROR: for yattyadocker_web_1  cannot stop container: 1f04148910c5bac38983e6beb3f6da4c8be3f46ceeccdc8d7de0da9d2d76edd8: Cannot kill container 1f04148910c5bac38983e6beb3f6da4c8be3f46ceeccdc8d7de0da9d2d76edd8: rpc error: code = PermissionDenied desc = permission denied

Version du système d'exploitation/version: Ubuntu 16.04 | Docker Version 17.09.0-ce, construire afdb6d4 | Docker Composer version 1.17.1, construire 6d101fb

Étapes pour reproduire:

  • Créé un rails de projet avec Dockerfile et docker-composer.yml. docker-composer.yml est de la version 3.
  • L'Image est construite avec succès, soit docker build -t <project name> . ou docker-compose up --build
  • Conteneurs démarre et s'exécute correctement.
  • Essayez d'arrêter de docker composer avec docker-composer vers le bas.

Ce que j'ai essayé::

  • J'ai pour exécuter sudo service docker restart , puis les conteneurs peuvent être supprimés.
  • Désinstallé docker, enlevé le panneau de répertoire, puis ré installé tout. Toujours face au même problème.

Remarque: Cette configuration fonctionne correctement plus tôt, mais de toute façon les autorisations de fichier peut-être changé et que je vois cette erreur. J'ai pour exécuter sudo service docker restart , puis les conteneurs peuvent être supprimés. Mais c'est très gênant et je ne sais pas comment résoudre ce problème.

Les Fichiers De Référence:

# docker-compose.yml
version: '3'
volumes:
  db-data:
    driver: local
  redis-data:
    driver: local  
services:
  db:
    image: postgres:9.4.1
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    env_file: local_envs.env
  web:
    image: yattya_docker:latest
    command: bundle exec puma -C config/puma.rb
    tty: true
    stdin_open: true
    ports:
      - "3000:3000"
    links:
      - db
      - redis
      - memcached
    depends_on:
      - db
      - redis
      - memcached
    env_file: local_envs.env
  redis:
    image: redis:3.2.4-alpine
    ports:
      # We'll bind our host's port 6379 to redis's port 6379, so we can use
      # Redis Desktop Manager (or other tools) with it:
      - 6379:6379
    volumes:
      # We'll mount the 'redis-data' volume into the location redis stores it's data:
      - redis-data:/var/lib/redis
    command: redis-server --appendonly yes
  memcached:
    image: memcached:1.5-alpine
    ports:
      - "11211:11211"
  clock:
    image: yattya_docker:latest
    command: bundle exec clockwork lib/clock.rb
    links:
      - db
    depends_on:
      - db
    env_file: local_envs.env
  worker:
    image: yattya_docker:latest
    command: bundle exec rake jobs:work
    links: 
      - db
    depends_on: 
      - db
    env_file: local_envs.env

Et Dockerfile:

# Dockerfile
FROM ruby:2.4.1

RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*

ENV APP_HOME /app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME

ADD Gemfile* $APP_HOME/
RUN bundle install

ADD . $APP_HOME

RUN mkdir -p ${APP_HOME}/log
RUN cat /dev/null > "$APP_HOME/log/development.log"

RUN mkdir -p ${APP_HOME}/tmp/cache \
    && mkdir -p ${APP_HOME}/tmp/pids \
    && mkdir -p ${APP_HOME}/tmp/sockets

EXPOSE 3000

191voto

Alejandro S. Points 461

J'ai installé Docker à partir du paquet snap et après un certain temps, j'ai décidé de passer à l'installation du référentiel apt.

Je faisais face au même problème et utiliser sudo aa-remove-unknown fonctionné pour moi.

Donc, aucune réinstallation d'Apparmor n'était nécessaire.

114voto

jsloan117 Points 861

Pour tous ceux qui ne souhaitent pas purger complètement AppArmor.

État de la vérification: sudo aa-status

Arrêtez-le et empêchez-le de redémarrer: sudo systemctl disable apparmor.service --now

Décharger les profils AppArmor: sudo service apparmor teardown

État de la vérification: sudo aa-status

Vous devriez maintenant pouvoir arrêter / tuer les conteneurs.

24voto

Moritz Points 507

Une solution directe au problème consiste à exécuter bash dans le conteneur à tuer et à appeler directement kill . Un exemple:

 host$ docker exec -it <container-name> sh
container$ ps
PID   USER     TIME  COMMAND
    1 root      0:00 {entrypoint.sh} /bin/sh /entrypoint.sh
   16 root      0:00 {entrypoint.sh} /bin/sh /entrypoint.sh
   24 root      0:00 sh
   31 root      0:00 ps
container$ kill 1
 

Pour vérifier que le conteneur a été tué, exécutez docker ps . C'est une alternative utile à la solution qui réinstalle apparmor car cela supprimera également snapd .

14voto

Parth Modi Points 817

J'ai été en mesure de résoudre le problème. Apparmor service dans ubuntu ne fonctionne pas normalement en raison de certains problème inconnu. Le problème était similaire au problème signalé dans moby projet https://github.com/moby/moby/issues/20554.

L' /etc/apparmor.d/tunables le dossier était vide, et https://github.com/mlaventure suggéré de purge/réinstaller apparmor pour l'obtenir à l'état initial.

Donc, j'ai réinstallé apparmor, et après le redémarrage , le problème a été résolu.

Espérons que cette aide.

9voto

user3929660 Points 21

Dans mon cas, le problème était que j'avais en conflit docker installations: docker de la officielle en docker-ce package , mais docker-compose d'Ubuntu package de composant logiciel enfichable.

L'installation correcte docker-compose de l'officiel github (instructions ici) a fait le tour. J'ai également suivi le Linux post-instructions d'installation et il a peut-être aidé aussi (pour exécuter le panneau comme un utilisateur non root)

Je viens de quitter AppArmor seul ici - je n'ai pas la toucher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X