컨테이너 내에서 루프 장치를 만들고 설치하는 것이 가능하도록 노력하고 있습니다. 이는 내 개발 시스템에서는 작동하지만 자동화된 빌드가 수행되어야 하는 빌드 서버에서는 작동하지 않습니다.
privileged
컨테이너를 .My 컨테이너 시작 줄: 으로 시작했는지 확인했습니다. docker run --privileged -it --rm <my_build_image>:latest /bin/bash
컨테이너 내에서 다음 단계를 시도했습니다.Lostup 매뉴얼 페이지에서:
# dd if=/dev/zero of=/var/tmp/file.img bs=1024k count=4
...
# losetup --show --find /var/tmp/file.img
...
이렇게 하면 사용되지 않은 다음 루프 장치가 제공되고 이를 /dev/loop에 연결해야 합니다.N. 그러나 다음과 같은 내용이 표시됩니다(루프 모듈이 로드되어 /dev/loop-control
존재한다는 것을 보여줍니다).
[root@64a3a6900e0d /]# losetup --show --find /var/tmp/file.img
losetup: Could not find any loop device. Maybe this kernel does not know
about the loop device? (If so, recompile or `modprobe loop`.)
[root@64a3a6900e0d /]# ls /dev/loop*
/dev/loop-control
[root@64a3a6900e0d /]# lsmod | grep loop
loop 28072 0
내 개발 상자에서는 이것이 작동합니다. 권한으로 컨테이너를 로드 loop
하고 시작하여 루프 장치를 만들 수 있었습니다. 이제 무엇을 확인해야 할까요?
답변1
문제에 대한 해결책이 있습니다. 몇 가지 문제는 제가 docker를 처음 사용하는 것은 아니지만 아직 숙련된 docker 사용자도 아니라는 것입니다. 컨테이너가 생성되면 /dev
당시 존재했던 디렉터리가 어떻게든 컨테이너에 매핑되는 것 같아요 . 나는 이것이 디렉토리에 대한 "실시간" 설명이라고 생각했지만 /dev
그렇지 않습니다. 파일이 없으면 /dev/loop#
컨테이너에 권한이 있어도 파일이 존재하는 것을 허용하지 않습니다.
따라서 해결책은 Jenkins 파이프라인에 컨테이너를 생성하기 전에 파일 생성을 예약하는 단계를 두는 것입니다 /dev/loop#
. 그러면 컨테이너가 생성되어 /dev/loop#
사용 가능해집니다.