lxc-autostart
Debian 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