Docker (CentOS 7 avec SYSTEMCTL) : Failed to mount tmpfs & cgroup
(Je suis un Docker débutant. Ensuite, j'ai suivi quelques tutoriels pour CentOS-7)
Dans mon CentOS 7.2
, j'ai essayé d'apprendre le Panneau en suivant les étapes ci-dessous.
# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 15:39:25 2016
OS/Arch: linux/amd64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 15:39:25 2016
OS/Arch: linux/amd64
# docker pull centos:latest
# docker images
centos latest 778a53015523 12 days ago 196.7 MB
# mkdir ~/docker/centos7-systemd
# cd ~/docker/centos7-systemd
# vi Dockerfile
FROM centos
MAINTAINER "XXXX XXXX" <[email protected]>
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
# docker build --rm -t local/centos7-systemd .
..
Successfully built 1a9f1c4938b3
# docker images
centos latest 778a53015523 12 days ago 196.7 MB
local/centos7-systemd latest 1a9f1c4938b3 8 seconds ago 196.7 MB
Donc, jusqu'à ce point, tout (semble) ok.
Maintenant, le problème vient quand je lance:
# docker run -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 local/centos7-systemd
Failed to mount tmpfs at /run: Operation not permitted
Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted
[!!!!!!] Failed to mount API filesystems, freezing.
Qu'est-ce à dire, et plus important encore, ce qui se passe et comment puis-je résoudre ce problème, veuillez?
Merci à tous 🙂
Vous devez vous connecter pour publier un commentaire.
essayez d'exécuter votre conteneur en mode privilégié:
cela devrait résoudre votre problème
-d
option! Merci!j'ai suivi
et de venir avec
vous demandez-vous, il n'est pas sous MacOS ?
J'ai eu le même problème avec menu fixe pour Windows (1.12.3)...
La dernière
boot2docker
n'a passystemd
. Nous ne pouvons pas avoirsystemd
dans un conteneur Docker, si l'hôte ne l'a pas. Depuis le dossier important pour qui est/sys/fs/cgroup/systemd
.Donc finalement, j'ai créer un
default
vm dans VitualBox basé sur Alpine Linux et undefault
docker-machine
avec legeneric
pilote.Comme je l'ai dit ici, vous n'êtes pas obligé tu utiliser le
--privileged=true
paramètre (ce qui peut être dangereux à mon humble avis), vous avez juste oublié d'ajouter-v /run
à votredocker run
commande.Donc votre dernière commande run qui devraient travailler serait:
L'approche plus moderne, après Daniel Walsh a contribué à une série de patchs, est-ce...
Voir https://developers.redhat.com/blog/2016/09/13/running-systemd-in-a-non-privileged-container/ pour plus d'informations
MacOS X n'a pas besoin de monter cgroups volume dans un conteneur
Après l'exécution de nombreux conteneur cas, Mon mac coincé dans
[!!!!!!] Failed to mount API filesystems, freezing.
référence
Actuellement bash mode fonctionne bien pour moi
$docker run -it -p 80:80 ${ImageID} /bin/bash
Pendant que vous peut exécuter systemd à l'intérieur d'un conteneur, je ne pense pas que c'est une bonne idée. Voici pourquoi:
(https://stackoverflow.com/a/46801406/399105)
Plus pertinentes à cette question en particulier:
Alors qu'il peut y avoir des situations dans lesquelles l'exécution de systemd à l'intérieur d'un conteneur est souhaitée, elle nécessite des solutions de contournement (comme vous pouvez le voir dans les autres réponses), et je ne crois pas que c'est un bon point de départ pour quelqu'un d'apprentissage des conteneurs.
Ce post de blog était lié comme un exemple de la façon d'obtenir ce travail, mais vous pouvez voir que le conteneur aura encore besoin d'être exécuté en tant qu'utilisateur root:
Bien que ce n'est certainement pas unique à ces conteneurs, il est encore moins sûr:
Comme autre preuve de ce qui n'est pas une bonne idée, même Red Hat propre CentOS Dockerfiles ne pas le faire. Par exemple (source):
Bien sûr, si vous êtes conscient de tout cela et encore envie de courir systemd dans un conteneur, comme d'autres l'ont déjà mentionné, c'est possible. Je ne pense pas qu'il n'y a aucune valeur en répétant ce qu'ils ont déjà dit.
Si vous n'avez pas besoin de exécuter le conteneur dans le premier plan, vous pouvez le démarrer en mode détaché pour éviter cette erreur. Par exemple:
Ensuite, vous pouvez utiliser quelque chose comme cela pour obtenir un shell dans le conteneur:
Si vous n'avez pas de commande à l'avant-plan le Dockerfile CMD, provoquant le conteneur à quitter immédiatement, vous pouvez ajouter une commande qui maintient en cours d'exécution, par exemple:
Voir le DONC réponse pour plus de détails sur le dernier exemple.