Development Tip

Ubuntu Docker 이미지 내의 systemd 및 systemctl

yourdevel 2021. 1. 8. 22:28
반응형

Ubuntu Docker 이미지 내의 systemd 및 systemctl


systemdUbuntu Docker 이미지에서 활성화되지 않았거나 사용할 수없는 것 같습니다 .

ubuntu:16.04ubuntu:16.10이미지 에서 Docker 컨테이너를 실행 하고 있습니다.

내가 실행하면 systemctl status ssh16,04컨테이너 결과는 오류입니다 Failed to connect to bus: No such file or directory. 에서 16.10컨테이너 오류입니다 bash: systemctl: command not found.

내가 할 경우 which systemctlsystemctl은 16.04컨테이너에는 있지만 컨테이너에는 없습니다 16.10.

나는 /lib/systemd존재 하는 것을 발견했다 .

나는 systemd 설치를 시도했다 apt-get install systemd libpam-systemd systemd-ui. 그런 다음 which systemctlsystemctl을 찾지 16.10systemctl status ssh여전히 오류가 발생합니다.Failed to connect to bus: No such file or directory

내 주요 질문은 : Ubuntu Docker 이미지에서 사용하기 위해 systemd 및 systemctl을 어떻게 활성화 할 수 있습니까?

Ubuntu Docker 컨테이너에서 systemd가 활성화되지 않는 이유는 무엇입니까? 컨테이너를 인스턴스화하는 데 systemd가 사용되지 않습니까?

나는에서 우분투 전환에 대한 정보 만 우분투 / 우분투 도커 이미지,이 주제에 대한 모든 문서 찾기 위해 실패 Upstart에를 systemd. 완전한 설명을 제공하는 문서가 있습니까?


이것은 의도적으로 설계된 것입니다. Docker는 컨테이너의 포 그라운드에서 프로세스를 실행해야하며 컨테이너의 pid 네임 스페이스 내에서 PID 1로 생성됩니다. Docker는 OS 가상화가 아닌 프로세스 격리를 위해 설계되었으므로 컨테이너 내에서 실행되는 다른 OS 프로세스 및 데몬 (예 : systemd, cron, syslog 등)이 없으며 실행하는 진입 점 또는 명령 만 있습니다.

systemd 명령이 포함되어 있다면 진입 점이 init를 대체하기 때문에 작동하지 않는 많은 것들이있을 것입니다. Systemd는 cgroup을 변경하는 기능으로 인해 프로세스가 컨테이너의 격리를 벗어날 수 있기 때문에 docker가 컨테이너 내부를 제한하는 cgroup을 사용합니다. 컨테이너 내에서 systemd가 init로 실행되지 않으면 시작 및 중지 명령을 처리 할 데몬이 없습니다.

참조 URL : https://stackoverflow.com/questions/39169403/systemd-and-systemctl-within-ubuntu-docker-images

반응형