Có vẻ như systemd
không hoạt động hoặc không có sẵn trong hình ảnh Docker của Ubuntu.systemd và systemctl trong hình ảnh Docker của Ubuntu
Tôi đang chạy vùng chứa Docker từ các hình ảnh ubuntu:16.04
và ubuntu:16.10
.
Nếu tôi thực hiện systemctl status ssh
trong hộp chứa 16,04
, kết quả là lỗi Failed to connect to bus: No such file or directory
. Trong vùng chứa 16.10
lỗi là bash: systemctl: command not found
.
Nếu tôi làm which systemctl
systemctl được tìm thấy trong vùng chứa 16.04
nhưng không nằm trong vùng chứa 16.10
.
Tôi đã phát hiện thấy rằng /lib/systemd
tồn tại.
Tôi đã thử cài đặt systemd với apt-get install systemd libpam-systemd systemd-ui
. Sau đó which systemctl
phát hiện systemctl trong 16.10
nhưng systemctl status ssh
vẫn cung cấp cho các lỗi Failed to connect to bus: No such file or directory
câu hỏi chính của tôi là: Làm thế nào có thể systemd và systemctl được kích hoạt để sử dụng trong hình ảnh Ubuntu Docker?
Tại sao systemd không hoạt động trong các bộ chứa Docker của Ubuntu? Là systemd không được sử dụng trong instantiating container?
Tôi không tìm thấy bất kỳ tài liệu nào về chủ đề này cho hình ảnh Docker Ubuntu/Ubuntu, chỉ thông tin về quá trình chuyển đổi Ubuntu từ Upstart
đến systemd
. Có tài liệu nào đưa ra lời giải thích đầy đủ không?
Nếu bạn muốn có hệ thống init đầy đủ chức năng, hãy sử dụng máy ảo. – user2105103
Có một số đề xuất để bắt chước một hệ thống init tại PID-1 bên trong một thùng chứa. Về cơ bản nó sẽ phản ứng với SIGTERM được gửi bởi "docker stop" phân phối nó đến các quá trình khác trong container. Và nó sẽ có thể gặt hái zombie từ các quá trình nền bị giết. => Bây giờ nó chỉ còn lại để chọn một trong những triển khai được xung quanh. Một số chỉ chuyển một "init" thực trong C/C++, một số khác đang thực hiện một số mã xung quanh tín hiệu (3) và waitpid (3) ở một ngôn ngữ cấp cao - lib chuẩn "tín hiệu" của Python cũng hoạt động cho điều đó. (như được hiển thị trong kịch bản thay thế docker-systemctl của tôi) –