마운트를 다른 마운트 네임스페이스로 이동할 수 있나요?

마운트를 다른 마운트 네임스페이스로 이동할 수 있나요?

질문: 한 네임스페이스에서 다른 네임스페이스로 마운트를 이동/복사할 수 있는 방법이 있습니까?

설명: 컨테이너가 생성될 때 존재하지 않는 디렉터리를 마운트하고 싶습니다.

  1. 컨테이너를 만들고 있습니다. 호스트 마운트 네임스페이스의 자체 복사본을 가져옵니다.
  2. 호스트가 일부를 만듭니다.SourceDirectory
  3. 호스트 내부에서 설치(공유 옵션 활성화)를 바인딩합니다 SourceDirectory./container_rootfs/tempDirectory
  4. 컨테이너 내부에서 파일을 읽고 쓰려고 합니다 /tempDirectory.SourceDirectory

4단계. 3단계에서 공유 바인딩 마운트는 현재 호스트에 대한 네임스페이스 공유만 마운트하고 컨테이너 네임스페이스는 이전에 "분할"되었기 때문에 작동하지 않습니다. /tempDirectory3단계는 전혀 할 수 없을 것 같아요 .

디렉토리가 존재하고 마운트된 경우앞으로컨테이너를 생성하면(작업 순서는 2 > 3 > 1 > 4 위의 번호가 매겨진 목록에 있음) 이제 컨테이너에 마운트 네임스페이스가 복사되었으므로 모든 것이 잘 작동합니다.뒤쪽에추가 번들 설치가 생성되었습니다. 에 저장하면 으로 /tempDirectory전송됩니다 SourceDirectory.

그래서 내 질문은 - 한 네임스페이스(내 호스트 설치 네임스페이스)에서 다른 네임스페이스(컨테이너 설치 네임스페이스)로 설치를 이동/복사할 수 있는 방법이 있습니까?

이것이 관련이 있다면 (그렇지 않다고 생각합니다) 컨테이너에 crun을 사용합니다.

답변1

기존 마운트를 소급해서 복사하거나 이동하는 방법은 모르겠습니다만...

mount --bind컨테이너의 네임스페이스에서 직접 명령을 실행할 수 있습니다.에른슬.

컨테이너에서 실행 중인 프로세스의 pid(프로세스 ID)를 식별해야 합니다. 찾을 수 있는 한 컨테이너에 있는 모든 프로세스를 사용할 수 있습니다.

  • 나는 당신의 관심을 끌 것입니다--pid-file실행 옵션.
  • ps -ef실패하면 컨테이너에서 실행 중인 프로세스에 대한 검색을 사용해야 할 수도 있습니다 . 컨테이너는 pid 네임스페이스에 있을 수 있으며 컨테이너 내부의 호스트에 다른 pid를 제공할 수 있습니다. 호스트가 보는 pid가 필요합니다.

컨테이너화된 프로세스에 pid가 있다고 가정하면 다음을 4321사용하여 마운트할 수 있어야 합니다.

nsenter -mt 4321 mount --bind SourceDirectory /container_rootfs/

실험하려면 nsenter먼저 대화형 명령줄을 사용하여 시도해 보는 것이 좋습니다. 컨테이너화된 프로세스의 pid가 다음을 사용하는 경우 4321:

nsenter -mt 4321 /bin/bash

네임스페이스를 마운트하고chroot. 컨테이너화된 프로세스는 자체 마운트 네임스페이스에 배치되지만 루트도 변경됩니다. 이를 수행하는 방법에 따라 nsenterchroot가 발생할 수도 있고 그렇지 않을 수도 있습니다.


컨테이너가 시작된 후에 마운트 했다면 SourceDirectory컨테이너의 네임스페이스에 전혀 마운트되지 않았다면 이전과 같은 방법으로 마운트하는 것이 가능할 수도 있는데...

내가 읽은 것 중에서mount /dev/sda4파티션을 두 번 마운트할 수 있으므로 이미 호스트에서 수행하고 있다면 mount /dev/sda4일반적으로 컨테이너에서 수행하는 것이 좋습니다. 결과는 바인드 마운트를 사용하는 것과 동일합니다.

관련 정보