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
몇 가지 작업을 수행해야 합니다.
dbus
당신의 컨테이너에- 실제로 컨테이너를 시작해야 합니다.
systemd-nspawn --boot
답변2
systemd는 여기에서 정확합니다. chroot에서 실행하려고 하지만 chroot에는 완전히 다른 경로, 라이브러리 및 서비스 세트가 있습니다. systemctl 호출을 허용하면 혼란스러울 수 있습니다. 올바른 D-Bus 라이브러리인가요? 내부의 systemctl 버전이 외부 데몬 버전과 동일합니까?
chroot 내부에서만 서비스를 사용하려면 다음 두 가지 옵션이 있습니다.
- 사용새로운 휴대용 서비스, systemd 239에서 소개되었습니다. 내부 서비스를 외부에서 액세스할 수 있게 하려는 경우 이것이 바로 귀하가 원하는 것입니다.
- chroot 메모리가 systemd에 있고
systemd-nspawn --boot
chroot 내에서 별도의 systemd 인스턴스를 실행하는 데 사용되는지 확인하십시오. 그런 다음 활성화할 수 있으며 내부적으로만 적용됩니다.