Andockfenster (CentOS 7 mit SYSTEMCTL) : Failed to mount tmpfs & cgroup
(Ich bin ein Andockfenster Anfänger. Dann folgte ich einige tutorials für CentOS-7)
In meinem CentOS 7.2
habe ich versucht zu lernen, Docker, indem Sie die folgenden Schritte ausführen.
# 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
So, bis zu diesem Punkt alles (scheinbar) ok.
Jetzt das problem kommt, wenn ich ausführen:
# 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.
Was bedeutet das sogar bedeuten, und noch wichtiger, was ist passiert und wie kann ich dieses Problem lösen, bitte?
Danke Euch allen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen, führen Sie Ihre container in einem privilegierten Modus:
dies sollte Ihr problem lösen
-d
option! Danke!folgte ich
kommen, mit
Fragen, es ist nicht bei MacOS ?
Ich hab das gleiche problem mit Docker für Windows (1.12.3)...
Den neuesten
boot2docker
nichtsystemd
. Wir können nichtsystemd
in einem Docker container, wenn der host hat es nicht. Da die wichtigen Ordner für das ist/sys/fs/cgroup/systemd
.So endlich, ich erstelle ein
default
vm in VitualBox basierend auf der Alpine-Linux unddefault
docker-machine
mit dergeneric
Treiber.Wie gesagt hier, sind Sie nicht gezwungen, tu mit den
--privileged=true
parameter (das kann gefährlich sein, IMHO), Ihr habt nur vergessen, hinzuzufügen-v /run
zu Ihremdocker run
Befehl.Also Ihren letzten Befehl ausführen, das sollte funktionieren würden:
Den modernen Ansatz, um diese, nachdem Daniel Walsh dazu beigetragen, eine Reihe von patches, ist dieses...
Sehen https://developers.redhat.com/blog/2016/09/13/running-systemd-in-a-non-privileged-container/ weitere Informationen
Wenn Sie nicht brauchen, um laufen die container in den Vordergrund, Sie können ihn starten, in detached-Modus, um diesen Fehler zu vermeiden. Zum Beispiel:
Dann können Sie etwas wie diese, um eine Granate in den container:
Wenn Sie nicht über einen Befehl in den Vordergrund in der Dockerfile CMD, verursacht der container sofort zu beenden, können Sie fügen Sie einen Befehl hält, dass es ausgeführt wird, z.B.:
Sehen die SO beantworten für mehr details auf das Letzte Beispiel.
MacOS X nicht erforderlich zu montieren cgroups Volumen im container
Nach laufen viele container-Instanzen, Meinen mac stecken in
[!!!!!!] Failed to mount API filesystems, freezing.
Referenz
Derzeit bash-Modus ist in Ordnung, für mich
$docker run -it -p 80:80 ${ImageID} /bin/bash
Während Sie kann laufen systemd in einem container, ich glaube nicht, dass es eine gute Idee. Ist hier, warum:
(https://stackoverflow.com/a/46801406/399105)
Mehr relevant zu dieser Frage konkret:
Zwar gibt es Situationen, in denen systemd in einem container, der gewünscht ist, erfordert es einige workarounds (wie Sie sehen können aus die anderen Antworten), und ich glaube nicht, es ist ein guter Ausgangspunkt für jemanden, der lernen Containern.
Diese blog-post verbunden war, als ein Beispiel, wie es funktioniert, aber Sie können sehen, dass der container immer noch ausgeführt werden müssen als root-Benutzer aus:
Obwohl dies ist sicherlich nicht eindeutig zu diesen Containern, es ist noch weniger sicher:
Als weiterer Beweis für diese nicht eine gute Idee, auch Red Hat die eigene CentOS Dockerfiles dies nicht tun. Zum Beispiel (Quelle):
Natürlich, wenn Sie sind sich bewusst, all dies und noch laufen will systemd in einem container, wie andere bereits erwähnt haben, es ist möglich. Ich glaube nicht, dass es irgendeinen Wert zu wiederholen, was Sie schon gesagt.