Próbuję sprawdzić, czy mogę uruchomić systemd w kontenerze dokera (który uruchamia arch linux w kontenerze).
Zaczynam dokera ze wszystkimi możliwościami i wiążę mount w cgroups:
docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
jeśli jednak spróbuję uruchomić systemdinary:
Trying to run as user instance, but the system has not been booted with systemd.
Rozpocznie się próba znalezienia sposobu prawidłowego inicjowania rzeczy w systemie.
arch-linux
docker
systemd
Michael Neale
źródło
źródło
systemd
Strona człowiek byłby dobrym miejscem, aby rozpocząć. Google publikuje także kilka artykułów na temat uruchamiania systemu pod dokerem.Odpowiedzi:
Aby uruchomić systemd w kontenerze Docker, system hosta musi również uruchomić systemd. Oznacza to, że nie możesz używać Ubuntu jako hosta. W tej chwili jedynymi znanymi mi dystrybucjami hosta są Fedora (która, w przeciwieństwie do Ubuntu, ma najnowszą wersję Dockera) lub RHEL 7.
źródło
Oto moja główna wycena: D uruchomiony systemd w kontenerze dokera z Ubuntu: D Mam Ubuntu pracujący z systemd wewnątrz dokera
GitHub Repo dla mojego kontenera systemowego dokera
Wynik:
źródło
Obecnie systemd nie działa poprawnie w kontenerze dokera z powodu całego zestawu przyczyn, tj. Braku odpowiednich uprawnień. Możesz przeczytać o tym w różnych kwestiach związanych z github w projekcie dokera, takich jak uruchamianie systemd wewnątrz zawieszeń kontenera łuku dokującego lub segfault i powiązanych zagadnień dotyczących monitorowania init / procesu. (Chciałbym tutaj powiązać więcej problemów, ale nie mogę, ponieważ najwyraźniej nie mam wystarczającej reputacji).
Jak widać, jest to temat, nad którym obecnie pracujemy, a kilka łatek zostało już scalonych w celu poprawy zachowania, dzięki czemu możemy spodziewać się, że zadziała to wkrótce.
Najwyraźniej niektórym programistom udało się już uruchomić go na systemach fedora, jak udokumentowali na swoim blogu .
źródło
Możesz uruchomić systemd w kontenerze dokera. System operacyjny hosta nie ma znaczenia, chociaż będziesz musiał zamontować wolumin hosta / sys / fs / cgroup. Mam go do pracy zgodnie z tym przewodnikiem: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/
źródło
/sys/fs/cgroup
, o których wspomniałeś).Byłem w stanie pracować wstecz od tego: https://registry.hub.docker.com/u/codekoala/arch/
Docker 1.1 ułatwia to, ponieważ grupy (ro) są już dostępne w kontenerach - wciąż potrzebuję dostępu prywatnego, aby móc tworzyć wierzchowce PrivateTmp, ale inaczej, o ile podasz cmd do uruchomienia jako systemowy plik binarny - działa dobrze.
źródło
Znalazłem to pytanie, próbując to zrobić w oficjalnym kontenerze debian: 8. Dla każdego, kto próbuje to zrobić na oficjalnym kontenerze debian: 8 (debian: jessie), odpowiedź @ Frank-from-DSPEED działa z niewielką modyfikacją, jak opisano w starszym poście git hub :
Następnie z pojemnika:
Działa to dla mnie idealnie, a ponieważ jest to tylko środowisko programistyczne, kwestia bezpieczeństwa nie ma dla mnie znaczenia.
Uwaga: Komenda / sbin / init pobiera / sbin / init na Proces 1, który jest kluczowym elementem umożliwiającym to działanie.
źródło
systemctl show-environment
odnawia dla mnieFailed to get D-Bus connection: Unknown error -1
. Kiedy uruchamiam kontener z--privileged
flagą zamiast--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 odpowiada jak zwyklePocząwszy od 2018 roku, to działa teraz dla mnie:
docker run -it -e container=docker
twoja-nazwa-obrazu/sbin/init
Nie da to jednak powłoki, więc aby zrobić coś pożytecznego, musisz najpierw włączyć usługę systemową (np. Sshd) w obrazie, jeśli nie zostało to jeszcze zrobione.
źródło