J'essaie de voir si je peux exécuter systemd dans un conteneur docker (qui exécute arch linux dans le conteneur).
Je démarre Docker avec toutes les capacités et lie le montage dans les groupes de contrôle:
docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
cependant, si j'essaye d'exécuter le binaire systemd:
Trying to run as user instance, but the system has not been booted with systemd.
Essayer de savoir comment lancer correctement les choses sur systemd démarre.
arch-linux
docker
systemd
Michael Neale
la source
la source
systemd
page de manuel serait un bon point de départ. Google fournit également plusieurs articles sur l'exécution de systemd sous docker.Réponses:
Pour exécuter systemd dans un conteneur Docker, le système hôte doit également exécuter systemd. Cela signifie que vous ne pouvez pas utiliser Ubuntu comme hôte. À l'heure actuelle, les seules distributions d'hôte que je connaisse de ce travail sont Fedora (qui, contrairement à Ubuntu, a la dernière version de Docker) ou RHEL 7.
la source
Voici ma pièce maîtresse: D exécutant systemd à l'intérieur d'un conteneur docker avec ubuntu: D J'ai Got Ubuntu travaillant avec systemd à l'intérieur de docker
GitHub Repo pour mon conteneur docker-systemd
Production:
la source
Actuellement, systemd ne fonctionne pas correctement dans un conteneur docker, pour toute une série de raisons, à savoir le manque de privilèges corrects. Vous pouvez le lire dans une variété de problèmes Github sur le projet Docker, comme l' exécution de systemd dans les blocages ou les erreurs de segmentation de Docker Arch et les problèmes connexes concernant la surveillance d'initialisation / de processus. (Je voudrais lier plus de problèmes ici, mais je ne peux pas car je n'ai apparemment pas assez de réputation).
Comme vous pouvez le voir, c'est un sujet sur lequel nous travaillons actuellement et quelques correctifs ont déjà été fusionnés pour améliorer le comportement, de sorte que nous pouvons nous attendre à ce que cela fonctionne très bientôt.
Apparemment, certains développeurs ont déjà réussi à le faire fonctionner sur les systèmes Fedora, comme ils l'ont documenté dans leur blog .
la source
Vous pouvez exécuter systemd dans un conteneur Docker. Le système d'exploitation hôte n'a pas d'importance, bien que vous deviez monter le volume / sys / fs / cgroup de l'hôte. Je l'ai fait fonctionner en suivant ce guide: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/
la source
/sys/fs/cgroup
, que vous avez mentionné).J'ai pu travailler à l'envers à partir de ceci: https://registry.hub.docker.com/u/codekoala/arch/
Docker 1.1 facilite cela car les groupes (ro) sont déjà fournis dans des conteneurs - j'ai toujours besoin d'un accès privé pour pouvoir créer des montages PrivateTmp, mais sinon, tant que vous spécifiez la cmd à exécuter en tant que binaire systemd - cela fonctionne bien.
la source
J'ai trouvé cette question en essayant de le faire dans le conteneur officiel debian: 8. Pour toute autre personne essayant de le faire sur le conteneur officiel debian: 8 (debian: jessie), la réponse de @ Frank-from-DSPEED fonctionne avec une légère modification, comme décrit dans un ancien post du hub git :
Puis dans le conteneur:
Cela fonctionne parfaitement pour moi et comme il ne s'agit que d'un environnement de développement, le problème de sécurité n'a pas d'importance pour moi.
Remarque: La commande / sbin / init obtient / sbin / init pour être le processus 1, qui est un élément clé pour que cela fonctionne.
la source
systemctl show-environment
reutrns pour moiFailed to get D-Bus connection: Unknown error -1
. Lorsque je démarre le conteneur avec un--privileged
indicateur au lieu de--cap-add SYS_ADMIN
(docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ubuntu_systemd_test debian:jessie /sbin/init
), systemctl répond comme d'habitudeÀ partir de 2018, cela fonctionne maintenant pour moi:
docker run -it -e container=docker
votre-nom-d'image/sbin/init
Cela ne vous donnera pas de shell, cependant, vous devrez d'abord activer un service systemd (par exemple sshd) à l'intérieur de l'image si cela n'a pas déjà été fait, pour faire quelque chose d'utile.
la source