2016-08-26 26 views
25

Wygląda na to, że systemd nie jest aktywny lub dostępny w obrazach Docker Ubuntu.systemd i systemctl w obrazach Ubuntu Docker

Używam kontenerów Docker z obrazów ubuntu:16.04 i ubuntu:16.10.

Jeśli wykonam systemctl status ssh w kontenerze 16,04, wynikiem jest błąd Failed to connect to bus: No such file or directory. W pojemniku 16.10 występuje błąd bash: systemctl: command not found.

Jeśli wykonam which systemctl systemctl znajduje się w kontenerze 16.04, ale nie w kontenerze 16.10.

Zauważyłem, że istnieje /lib/systemd.

Próbowałem zainstalować systemd z apt-get install systemd libpam-systemd systemd-ui. Następnie which systemctl znaleziska systemctl w 16.10 ale systemctl status ssh nadal daje błąd Failed to connect to bus: No such file or directory

Moje główne pytanie brzmi: jak można Systemd i systemctl być aktywowany do stosowania w obrazach Ubuntu Döcker?

Dlaczego systemd nie jest aktywny w kontenerach Ubuntu Docker? Czy systemd nie jest używany do tworzenia instancji kontenera?

Nie udało mi się znaleźć żadnej dokumentacji na ten temat dla obrazów Ubuntu/Ubuntu Docker, tylko informacje o przejściu z Ubuntu z Upstart do systemd. Czy istnieje dokumentacja dająca pełne wyjaśnienie?

+0

Jeśli chcesz w pełni funkcjonalny system init, użyj maszyny wirtualnej. – user2105103

+0

Istnieje kilka propozycji naśladowania systemu inicjalizacyjnego w PID-1 wewnątrz kontenera. Zasadniczo powinien reagować na sygnał SIGTERM, który jest wysyłany przez "przystanek dokujący", rozprowadzając go do innych procesów w pojemniku. I powinno być w stanie czerpać zombie z zabitych procesów w tle. => Teraz pozostaje tylko wybrać jedną z implementacji, które są w pobliżu. Niektóre z nich właśnie przenoszą prawdziwy "init" w C/C++, inni robią trochę skryptów wokół sygnału (3) i waitpid (3) w języku wysokiego poziomu - standardowa biblioteka "sygnałowa" Pythona również do tego służy. (jak pokazano w moim skryptu do dokowania docker-systemctl) –

Odpowiedz

23

Jest to zgodne z projektem. Docker powinien uruchamiać proces na pierwszym planie w kontenerze i będzie on tworzony jako PID 1 w przestrzeni nazw pid kontenera. Docker został zaprojektowany do izolacji procesów, a nie do wirtualizacji systemów operacyjnych, więc nie ma innych procesów i demonów systemu operacyjnego działających wewnątrz kontenera (takich jak systemd, cron, syslog, itp.), Tylko twój punkt początkowy lub polecenie, które uruchamiasz.

Jeśli zawierał polecenia systemd, wiele rzeczy nie działa, ponieważ twój punkt początkowy zastępuje init. Systemd używa także grup kontrolnych, które okna dokowane ograniczają wewnątrz kontenerów, ponieważ możliwość zmiany cgroups może pozwolić procesowi na uniknięcie izolacji kontenera. Bez systemd działającego jako init w twoim kontenerze, nie ma demona, który przetworzy polecenia start i stop.

+0

Nie ma dyskusji na temat któregoś z twoich punktów w tutorialu, do którego się połączyłeś, więc nie widzę, jak możesz powiedzieć, że jest to "prawie pierwsza uwaga w samouczek "i naprawdę nie jest po prostu link do strony głównej dokumentacji. Nauczyłem się na podstawie filmów z Self-Paced Docker Training, że Punkt Wejściowy kontenera ma PID 1, więc domyślnie zrozumiałem, że Entrypoint zastępuje systemd. Jednak po przeczytaniu wielu fragmentów dokumentów Dockera czuję, że jeszcze nie przeczytałem pełnego i jasnego wyjaśnienia. –

+1

Aby zrobić coś użytecznego prawie zawsze obraz podstawowy zawiera środowisko operacyjne, zrozumiałem, że jedyną różnicą między tym a pełnym OS jest to, że nie ma jądra, a zamiast tego używa jądra systemu operacyjnego. Być może zakłada się znajomość systemów operacyjnych. Jestem nowy w Linuksie. Potrzebuję szczegółowego wyjaśnienia różnic między standardowym środowiskiem operacyjnym Ubuntu/Linux Distro a środowiskiem operacyjnym Ubuntu/Linux Distro Dockerized. –

+1

Inną kwestią jest to, że pierwszy film treningowy z własnym tempem sugeruje, że wiele procesów może przebiegać wewnątrz kontenera, więc uważam, że twoje stwierdzenie o "żadnych innych procesach" uruchomionych w kontenerze jest co najmniej częściowo niedokładne. Dziękuję za odpowiedź. –

Powiązane problemy