nspawn에서 systemd 유틸리티(예: systemctl)를 실행하시겠습니까?

nspawn에서 systemd 유틸리티(예: systemctl)를 실행하시겠습니까?

debootstrap런타임 시 부팅되는 디렉터리가 있는 경우 내부적으로 systemd-nspawn작동하도록 하려면 어떻게 해야 합니까 systemd?

$ sudo systemd-nspawn -D ./foo
Spawning container mschroot on /opt/foo.
Press ^] three times within 1s to kill container.
root@foo:~# systemctl
Failed to connect to bus: No such file or directory

수동으로 시도하면 mount --bind다른 오류가 발생합니다.

$ sudo mount --bind /proc /opt/foo/proc
$ sudo chroot /opt/foo/
root@x230:/# systemctl
Running in chroot, ignoring request.

시작하려는 이 chroot에 서비스가 설치되어 있습니까?

답변1

systemd컨테이너 내부의 기능을 사용하려면 systemd-nspawn몇 가지 작업을 수행해야 합니다.

  1. dbus당신의 컨테이너에
  2. 실제로 컨테이너를 시작해야 합니다.systemd-nspawn --boot

답변2

systemd는 여기에서 정확합니다. chroot에서 실행하려고 하지만 chroot에는 완전히 다른 경로, 라이브러리 및 서비스 세트가 있습니다. systemctl 호출을 허용하면 혼란스러울 수 있습니다. 올바른 D-Bus 라이브러리인가요? 내부의 systemctl 버전이 외부 데몬 버전과 동일합니까?

chroot 내부에서만 서비스를 사용하려면 다음 두 가지 옵션이 있습니다.

  • 사용새로운 휴대용 서비스, systemd 239에서 소개되었습니다. 내부 서비스를 외부에서 액세스할 수 있게 하려는 경우 이것이 바로 귀하가 원하는 것입니다.
  • chroot 메모리가 systemd에 있고 systemd-nspawn --bootchroot 내에서 별도의 systemd 인스턴스를 실행하는 데 사용되는지 확인하십시오. 그런 다음 활성화할 수 있으며 내부적으로만 적용됩니다.

관련 정보