LXC 컨테이너 시스템을 감지하는 방법이 준비되었나요?

LXC 컨테이너 시스템을 감지하는 방법이 준비되었나요?

LXC 컨테이너를 시작한 다음 그 안에서 명령을 실행하려고 합니다. 문제는 컨테이너가 RUNNING 상태임에도 부팅이 모두 완료되지 않았다는 점이다. 이로 인해 /tmp에 문제가 발생합니다(그리고 다른 초기화에도 문제가 있을 것 같습니다).

이는 컨테이너를 생성하고, 시작하고, RUNNING 상태를 기다리고, 일부 명령을 실행하는 호출 시퀀스로 설명할 수 있습니다. 이 명령은 /tmp/hello 파일을 생성하고, 디렉터리를 표시하고, 잠시 기다린 후 디렉터리를 다시 표시합니다.

lxc-clone -B overlayfs -s -o vm -n c1 ; lxc-start -n c1 ; lxc-wait -n c1 -s RUNNING ; lxc-attach -n c1 -- su -c "touch /tmp/hello; ls -la /tmp; sleep 5; ls -la /tmp" slave ; lxc-stop -n c1 ; lxc-destroy -n c1

누구의 출력은

Created container c1 as snapshot of vm total 16 drwxrwxrwt 1 root root 4096 May 24 09:37 . drwxr-xr-x 1 root nogroup 4096 May 24 09:37 .. drwxrwxrwt 2 root root 4096 May 22 21:19 .ICE-unix drwxrwxrwt 2 root root 4096 May 22 21:19 .X11-unix -rw-rw-r-- 1 slave slave 0 May 24 09:37 hello total 16 drwxrwxrwt 1 root root 4096 May 24 09:37 . drwxr-xr-x 1 root nogroup 4096 May 24 09:37 .. drwxrwxrwt 2 root root 4096 May 24 09:37 .ICE-unix drwxrwxrwt 2 root root 4096 May 24 09:37 .X11-unix

그리고 일부 초기화 스크립트에 의해 /tmp/hello 파일이 삭제되었음을 보여줍니다.

시스템이 완전히 부팅될 때까지 컨테이너 내부에서 어떻게 기다리나요? 또한 컨테이너 외부에서는 어떻게 수행합니까?

답변1

systemd에서 실행되는 컨테이너의 경우 다음이 잘 작동하는 것 같습니다.

lxc-attach -n [CONTAINER NAME] -- systemctl isolate multi-user.target

sysvinit또는 기반 컨테이너 에 대해 동일한 논리를 적용할 수 있지만 upstart(런레벨에 도달할 때까지 차단하는 명령 실행), 어떤 명령이 이 작업을 수행할 수 있는지 머리로는 알 수 없습니다.

답변2

내 경우에는 네트워크 연결이 있을 때 LXC 컨테이너가 "준비"된 것으로 간주합니다(예: LXC 컨테이너 설정 스크립트 내에서 같은 명령이 apt update작동하도록).

Debian 11 Bullseye에서 lxc 호스트로 Debian 11 Bullseye lxc 컨테이너를 사용하여 다음 패턴을 활용하는 데 성공했습니다.

lxc-unpriv-start -n "$LXC_CONTAINER"

lxc-wait -n "$LXC_CONTAINER" -s RUNNING
# the lxc-wait RUNNING state is not that useful;
# a container is already considered RUNNING even though the network is not yet up

# the following command blocks until the container's network is up
lxc-unpriv-attach -n "$LXC_CONTAINER" -- systemctl start systemd-networkd-wait-online.service

# when the script reaches this part, the lxc container's network probably is completely up and running

lxc-unpriv-attach -n "$LXC_CONTAINER" -- apt update
# ...

관련 부분 은 다음 systemctl start systemd-networkd-wait-online.service과 같습니다. systemd-networkd-wait-online.service바로 사용 가능한 시스템 서비스입니다.network-online.target(또는 적어도 나는 이해합니다).

따라서 systemctl start systemd-networkd-wait-online.service네트워크가 가동될 때까지 실행이 차단됩니다.

관련 정보