51 votes

docker sur ubuntu 16.04 erreur lors de la destruction du conteneur

Je ne peux pas tuer ou arrêter un conteneur Docker. J'ai autorisé des utilisateurs non privilégiés à exécuter des commandes Docker. Et docker run hello-world fonctionne bien. Mais je ne peux pas arrêter un autre conteneur.

J'ai le suivant :

$ docker stop 59e3b815d1dc
Error response from daemon: cannot stop container: 59e3b815d1dc: 
Cannot kill container 59e3b815d1dcf2d8c8bcd3dd641c3c033b83ac68ea2f0257a32a76468af7374c: 
unknown error after kill: docker-runc did not terminate sucessfully: 
container_linux.go:393: signaling init process caused "permission denied"
: unknown

La même erreur avec sudo. Pendant ce temps, tous les conteneurs fonctionnent avec succès, mais pour les arrêter, il faut redémarrer complètement le système.

Exemple de composition Docker : # Utiliser les informations d'identification utilisateur/mot de passe de postgres/exemple version : '3.1' (en anglais)

services:

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Info Docker :

$ docker info
Containers: 7
 Running: 2
 Paused: 0
 Stopped: 5
Images: 10
Server Version: 17.12.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9b55aab90508bd389d7654c4baf173a981477d55
runc version: 9f9c96235cc97674e935002fc3d78361b696a69e
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.0-116-generic
Operating System: Ubuntu 16.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 11.61GiB
Name: peter-pen
ID: P6FS:C76H:WIAO:LCWC:TCHT:JEYB:6W3M:HXYD:S4E2:KTUZ:2T3Q:3GPI
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support

2 votes

C'est probablement AppArmor. Vous avez peut-être installé les paquets Docker d'Ubuntu puis ceux de Docker et les profils ont été mélangés ?

0 votes

Il y avait docker et docker-engine mais je les ai supprimés. L'erreur "permission denied" était avec ces paquets aussi et j'ai décidé d'installer docker considéré avec le manuel officiel.

0 votes

@Matt Je regarderai AppArmor plus tard, merci pour la direction.

149voto

Pour moi, supprimer l'inconnu d'AppArmor fonctionne :

sudo aa-remove-unknown

7 votes

Cela fonctionne ! mais je me demande où est la magie derrière cette commande ?

0 votes

J'ai monté un service docker sur Windows NTFS et il n'a pas réussi à s'arrêter, l'utilisation de cette commande fonctionne, mais j'ai encore besoin de connaître la raison derrière.

0 votes

Ce lien a suscité une discussion sur ce que c'est : docs.docker.com/engine/security/apparmor

23voto

Ben Njeri Points 386

AppArmor (Application Armor) est un module de sécurité Linux qui protège un système d'exploitation et ses applications contre les menaces de sécurité. Pour l'utiliser, un administrateur système associe un profil de sécurité AppArmor à chaque programme. Docker s'attend à trouver une politique AppArmor chargée et appliquée. Vérifiez les profils par défaut avec :

# sudo apparmor_status

Pour utiliser le profil par défaut de docker sur un conteneur, exécutez :

$ docker run --rm -it --name test-container --security-opt apparmor=docker-default image-name

Vous le désactivez en utilisant les commandes :

--security-opt apparmor=unconfined

Avec les commandes docker run.

Pour désactiver le service apparmor, utilisez :

# systemctl stop apparmor && systemctl disable apparmor

Pour Ubuntu 14. Utilisez :

# service apparmor stop
# update-rc.d -f apparmor remove

Il est recommandé de définir des profils de travail pour Docker apparmor plutôt que de le désactiver, en particulier pour les configurations de production.

Consultez ce document génial de Google sur la sécurisation des conteneurs avec AppArmor.

https://cloud.google.com/container-optimized-os/docs/how-to/secure-apparmor

0 votes

Y a-t-il une chose spécifique que je peux faire lors de la construction d'une image pour éviter le problème de ne pas être en mesure d'arrêter un conteneur lors de son exécution ? Je pose la question parce que j'ai remarqué que certaines images spécifiques posent ce problème, alors que d'autres sur le même système ne le posent pas.

12voto

Cette commande arrêtera tous les conteneurs Docker.

sudo killall docker-containerd-shim

Cette commande va supprimer tous les conteneurs docker.

sudo docker-compose down

3 votes

Pourquoi le PO ferait-il cela ? Expliquez ce que font ces commandes et pourquoi elles peuvent être utiles.

1 votes

Je suis époustouflé, merci beaucoup, ça a marché à merveille :)

7voto

Shajid Points 129

Exécutez simplement cette commande dans le terminal, tous les conteneurs en cours d'exécution seront arrêtés.

sudo systemctl restart docker.service

2voto

geek Points 57

Suivez ces étapes pour pouvoir arrêter le conteneur :

Désactiver le service apparmor :

sudo systemctl disable apparmor.service --now

Déchargez les profils AppArmor :

sudo service apparmor teardown

Vérifiez l'état d'AppArmor :

sudo aa-status

Vous devriez être en mesure d'arrêter et de tuer votre conteneur maintenant.

Crédits

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