Debian 11 Bullseye에서 권한이 없는 LXC 컨테이너를 자동 시작할 수 없습니다

Debian 11 Bullseye에서 권한이 없는 LXC 컨테이너를 자동 시작할 수 없습니다

lxc-autostartDebian 11 Bullseye에서는 권한이 없는 컨테이너가 시작되지 않습니다.

Debian 11 Bullseye에서 권한 없는 컨테이너 출시가 해결되었습니다. 답변lxc-unpriv-start대신 사용하면 되지만 lxc-start를 사용할 때는 이 방법을 활용할 수 없습니다 lxc-autostart.

답변1

기본 솔루션

자, 며칠 밤을 지새운 끝에 각 컨테이너에 대한 간단한 시스템 단위 파일을 만들었습니다. 예는 다음과 같습니다.

[Unit]
Description=Linux container my-container-name
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/lxc-start -n my-container-name
ExecStop=/usr/bin/lxc-stop -n my-container-name
StandardOutput=journal
User=my-lxc-user
Group=my-lxc-user
Delegate=yes

[Install]
WantedBy=multi-user.target

이것은 Delegate=yes게시된 조언에 대한 간단한 후속 조치입니다.여기그리고 또한답변위에 링크해두었습니다.

사용자가 방황하다아니요필수(언급됨여기).

이 솔루션의 좋은 부작용은 (권한 없는) 컨테이너를 종료해도 더 이상 호스트 종료가 지연되지 않는다는 것입니다.여기) 신호를 보내는 대신 사용법 /usr/bin/lxc-stop -n my-container-name에 정의되어 있기 때문입니다.ExecStop

튜닝 - 시스템 템플릿

감사해요systemd 템플릿 단위 파일모든 컨테이너에 단일 unif 파일을 사용할 수 있습니다. 내 최종 템플릿 단위 파일은 다음과 같습니다.

[Unit]
Description=Linux container %I
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/lxc-start -n %i
ExecStop=/usr/bin/lxc-stop -n %i
StandardOutput=journal
User=lxc
Group=lxc
Delegate=yes

[Install]
WantedBy=multi-user.target

파일 이름을 지정 [email protected]하고 배치했으므로 다음을 /etc/systemd/system/사용하여 모든 컨테이너를 제어할 수 있습니다.systemctl COMMAND [email protected]

lxc.service(본 내용은 원본이며 책임이 있음 을 알려드립니다 lxc-autostart.)

단위 파일 등의 개선 사항을 환영합니다! - 전문가가 아니기 때문에 기본적으로공식 문서그리고이것은 훌륭한 답변입니다.

튜닝 시스템 사용자 서비스

또 다른 발전은 Systemd 사용자 서비스를 사용하여 새 컨테이너를 배포할 때 루트로 실행할 필요가 없다는 것입니다.

단위 파일은 약간 다릅니다.

[Unit]
Description=LXC container %I
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/lxc-start -n %i
ExecStop=/usr/bin/lxc-stop -n %i
StandardOutput=journal
Delegate=yes

[Install]
WantedBy=default.target

multi-user.target그렇기 때문에사용 불가사용자 서비스를 위해서는 이를 사용해야 합니다 default.target.

이번에는 사용자가 로그인할 때가 아닌 부팅 시 서비스가 시작되도록 사용자 지연을 활성화해야 합니다. 다음 명령을 사용하여 루트 계정에서 지연을 활성화할 수 있습니다.loginctl enable-linger <my-lxc-user>

서비스 파일을 저장하고 다음을 사용하여 활성화했습니다..config/systemd/user/[email protected]systemctl --user enable [email protected]

답변2

lxc테스트 패키지와 함께 Debian 11.2(버전 4.0.11-1)를 실행하고 있습니다. 그것을 사용할 때mprudek의 시스템 유닛( ), 지연된 세션의 활성화 여부에 관계없이 항상 다음 오류가 발생합니다.nano /etc/systemd/system/[email protected]

$ journalctl -f -u lxc@container1
Mär 10 20:32:42 vm-debian systemd[1]: [email protected]: Control process exited, code=exited, status=1/FAILURE
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: Can't start an unprivileged container on a pure CGroups v2 host without a systemd user session running.
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: If you are trying to get a non-interactive user to have unprivileged containers running, you need to
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: enable lingering sessions for that user, via loginctl enable-linger lxcuser as root.
Mär 10 20:32:42 vm-debian systemd[1]: [email protected]: Failed with result 'exit-code'.
Mär 10 20:32:42 vm-debian systemd[1]: Failed to start LXC container container1.

아래와 같이 systemd 단위를 업데이트했는데 매력적으로 작동합니다. 권한이 없는 LXC 컨테이너가 lxcuser이 계정으로 실행됩니다.

[Unit]
Description=LXC container %I
Requires=systemd-user-sessions.service
After=systemd-user-sessions.service
Wants=systemd-user-sessions.service

[Service]
Type=forking
ExecStart=/usr/bin/lxc-unpriv-start -n %i
ExecStop=/usr/bin/lxc-stop -n %i
StandardOutput=journal
User=lxcuser
Group=lxcuser
Delegate=yes
RemainAfterExit=1
Restart=on-failure
RestartSec=5
SuccessExitStatus=0
RestartForceExitStatus=1

[Install]
WantedBy=multi-user.target
$ loginctl enable-linger lxcuser
$ systemctl disable lxc@container1
$ systemctl stop lxc@container1
$ systemctl daemon-reload
$ systemctl enable lxc@container1
$ systemctl start lxc@container1

관련 정보