ubuntu:16.04 컨테이너에 iso9660 마운트

ubuntu:16.04 컨테이너에 iso9660 마운트

iso9660우분투 도커 컨테이너에 마운트하려고 하는데 Unknown error -1.

docker run -i -t --rm ubuntu:16.04
apt-get update
apt-get install wget
wget http://dl-cdn.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.0-x86_64.iso
mkdir /mnt/alpine
mount -t iso9660 -o loop,offset=0 /alpine-virt-3.8.0-x86_64.iso /mnt/alpine/

산출:

mount: /mnt/alpine/: mount failed: Unknown error -1

여기서는 alpine-virt-3.8.0-x86_64.iso테스트 목적으로만 사용됩니다.

답변1

이는 컨테이너에 mount() 작업을 수행할 수 있는 충분한 권한이 없는 권한 문제인 것 같습니다.

다음을 확인하세요.

http://man7.org/linux/man-pages/man7/capability.7.html

그리고

https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capability

아마도 다음이 필요할 것입니다. CAP_SYS_ADMIN작동시키려면 매우 강력합니다.

사용 중인 OS/배포판에 따라 SELinux가 활성화되어 권한을 차단할 수도 있습니다.

사용 사례에 따라 다르지만 일반적으로 프로덕션 시스템에서는 다른 솔루션을 선택하는 것이 좋습니다. 컨테이너 권한을 SYS_ADMIN 수준으로 높이는 것은 확실히 안전한 아이디어로 간주되지 않습니다. 예를 들어 컨테이너 외부에서 마운트를 수행하고 마운트된 폴더를 매핑합니다.

답변2

기본적으로 사용자가 컨테이너 격리를 벗어나도록 허용할 수 있는 컨테이너 내부에서는 마운트를 실행할 수 없습니다(예: 호스트 루트 파일 시스템 마운트). 애플리케이션을 신뢰하는 경우 탑재 명령을 허용하는 추가 기능으로 실행되도록 컨테이너를 구성할 수 있습니다.하구트는 제안한다.

그러나 데이터를 컨테이너에 볼륨으로 탑재하는 것이 제가 선호하는 접근 방식입니다. docker 외부에서 파일을 다운로드한 다음 마운트합니다.

wget http://dl-cdn.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.0-x86_64.iso
docker run -i -t --rm --mount type=volume,dst=/mnt/alpine,volume-driver=local,volume-opt=type=iso9660,\"volume-opt=o=loop,offset=0\",volume-opt=device=$(pwd)/alpine-virt-3.8.0-x86_64.iso ubuntu:16.04

재사용 가능한 이름으로 이 볼륨을 마운트하려는 경우 해당 명령에 전달된 유사한 옵션을 사용하여 명명된 볼륨을 생성할 수도 있습니다.

관련 정보