systemd-nspawn 컨테이너의 배경을 설정하는 방법은 무엇입니까?

systemd-nspawn 컨테이너의 배경을 설정하는 방법은 무엇입니까?

일부 컨테이너를 실행하는 데 사용합니다 systemd-nspawn. 백그라운드에서 실행하는 데 사용할 수 있습니다 systemctl start systemd-nspawn@foo. 그러나 때로는 systemd-nspawn -bD foo. 백그라운드로 보내는 방법을 찾을 수 없습니다. 그림과 같이 터미널을 닫으면 컨테이너만 종료됩니다 machinectl list. 내가 이걸 할 수 있을까? 그렇다면 어떻게?

나는 컨테이너가 단순한 프로세스 이상이라는 것을 알고 있지만 그런 의미에서 원하는 효과는 백그라운드 프로세스와 동일합니다. 컨테이너는 실행되지만 원래 쉘은 나에게 다시 제공되기를 원합니다.

답변1

글쎄요, 그만한 가치가 있기 때문에 다음이 나에게 효과적이었습니다.

sudo systemd-nspawn -bxD/

내가 주지 않는다는 점을 제외하면 당신과 거의 똑같습니다.machine이름을 입력하고 -x컨테이너 루트 디렉터리의 임시 btrfs 스냅샷을 얻습니다./

getty그러면 내 터미널 pty에 컨테이너가 표시되고 login모든 항목이 로그인됩니다.

한동안 약간 혼란스러웠다는 점은 인정하지만, systemctl컨테이너를 조금 뒤져본 후 zsh깨달았습니다 .(컨테이너 내에서 실행):

systemctl stop console-getty.service

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or other units.
Authenticating as: mikeserv
Password:
==== AUTHENTICATION COMPLETE ===

이로 인해 시스템이 터미널 제어를 포기하게 됩니다. 유일한 것은 내가 처음에 그것을 사용하고 있다는 것입니다 sudo. 또한 인증을 위한 자체 터미널 제어 계층도 갖습니다. 이로 인해 빈 터미널이 남고 kill -CONT "$(pgrep ksh)"나에게 아무런 도움이 되지 않습니다. 그래서 1~2분 정도 더 당황했지만,(다른 터미널에서)...

sudo fuser -v /dev/pts/*

                     USER        PID ACCESS COMMAND
/dev/pts/0:          mikeserv   8347 F.... zsh
                     root      18003 F.... sudo
/dev/pts/13:         mikeserv   9553 F.... zsh
                     mikeserv  16838 F.... ksh
                     root      17657 F.... sudo
                     root      17658 F.... systemd-nspawn
/dev/pts/14:         root      17675 F.... systemd

나는 위의 목록을 받았고 그래서 생각했습니다. 대체 뭐지?

sudo kill -STOP 17657

그리고 나서 - 보라, 보라 - 나는 ksh같은 터미널로 돌아왔다. 요약하자면, 아직 액세스 권한이 있는지 확인해야 합니다.machine물론 그렇지 않으면 쓸모가 없습니다.

machinectl -l

MACHINE                    CLASS     SERVICE
localhost-35ceaa76b1306897 container nspawn

좋아요...

sudo machinectl login localhost-35ceaa76b1306897

Connected to machine localhost-35ceaa76b1306897. 
Press ^] three times within 1s to exit session.

Arch Linux 4.0.7-2-ARCH (pts/0)

localhost-35ceaa76b1306897 login:

getty다른 터미널에서 또 하나 받았어요 !

답변2

비슷한 문제가 있습니다. 내 접근 방식은 dtach컨테이너를 실행하는 터미널에서 연결 및 분리를 제어하는 ​​것입니다. 그런 다음 컨테이너 내부에서 tmux/ screen등을 실행할 수 있습니다.

machinectlsystemd을 사용하면 시작 시 컨테이너를 실행할 수 있지만 이 글을 쓰는 시점에는 이 기능을 포함하는 안정적인 데비안 버전이 없습니다 .

관련 정보