USB 저장소에서 도커를 실행하도록 만들기

USB 저장소에서 도커를 실행하도록 만들기

Docker 구성, 이미지, 컨테이너 등을 외부 저장소에 저장하려고 합니다. 이 튜토리얼을 따라 https://www.howtogeek.com/devops/how-to-store-docker-images-and-containers-on-an-external-drive/

/etc/docker/daemon.json을 만들었습니다.

{
    "data-root": "/media/user/MYUSB/docker-data"
}

하지만 USB 저장소(MYUSB)를 연결하고 도커 서비스를 시작하면 이 서비스가 실패합니다.

$ sudo service docker start
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

$ sudo dockerd --debug
INFO[2023-07-06T12:36:29.650356567+02:00] Starting up                                  
could not create or set daemon root permissions: /media/user/MYUSB/docker-data: chown /media/user/MYUSB/docker-data: operation not permitted

그리고 컴퓨터를 다시 시작하면 서비스는 데이터를 저장하는 대신 새로운 깨끗한 MYSUB 폴더를 생성하고 시스템은 실제 USB 저장소를 MYUSB1로 마운트합니다(도커 데이터를 저장하는 데 사용하지 않음).

내 시스템은 USB 키를 마운트하고 권한은 루트:루트가 아닌 사용자:사용자로 설정되어 있으므로 여기에서 올 수도 있습니다. 하지만 루트로 실행되는 docker 서비스가 user:user 저장소를 사용할 수 없다는 점이 궁금합니다.

루트 사용자로 USB를 수동으로 마운트하려고 하면 내가 만든 /media/user/MYUSB 폴더는 USB를 마운트할 때까지 루트:루트로 설정됩니다. 소유자 변경자는 사용자:사용자입니다.

특이한 구성이 아닌 것 같은데도 인터넷에서 이 문제를 건너는 유일한 사람이 나뿐이라는 사실이 조금 당황스럽습니다.

답변1

몇 가지 시도를 통해 USB 플래시 드라이브에 FAT32 또는 POSIX 권한을 지원하지 않는 다른 파일 시스템이 있다는 사실을 추론했습니다. Docker에서는 이와 같은 파일 시스템을 사용할 수 없습니다. 하지만 그게 전부는 아닙니다!

자동 마운트된 파일 시스템은 Docker에 적합하지 않습니다.노수드그리고노드. 일반적으로 Docker 이미지 내부에 있는 Linux 루트 파일 시스템은 여기에 적절하게 배치할 수 없습니다. 를 사용하여 이를 확인할 수 있습니다 mount | grep media. (자동 마운트는 일반적으로 다음을 사용하여 작동합니다.udisks2요즘에는.)

먼저 플래시 드라이브에 적절한 파일 시스템을 넣어야 합니다(예:ext4).

그런 다음 다음을 확인해야 합니다.udisks2파일 시스템을 마운트하지 않습니다(부적절한 옵션 및 너무 늦음). 당신은 사용할 수 있습니다udev파일 시스템을 무시하도록 하는 규칙:

SUBSYSTEM=="block", ENV{ID_FS_UUID}=="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX", ENV{UDISKS_IGNORE}="1"

이것을 /etc/udev/rules.d/99-ignore-my-usb.rules. 를 사용하여 새로 생성된 파일 시스템의 파일 시스템 UUID를 찾을 수 있습니다 blkid.

/etc/fstab그런 다음 USB 플래시 드라이브가 충분히 일찍 마운트되었는지 확인하기 위해 (다시 UUID를 사용하여) 적절한 항목을 생성합니다 . Docker 구성을 조작할 필요도 없으며 /var/lib/docker기본 Docker 데이터 디렉터리인 에 마운트하기만 하면 됩니다. 이 같은:

UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX  /var/lib/docker  ext4  relatime  0 0

모든 것이 제대로 작동하는지 확인하려면 재부팅하면 됩니다. Docker가 시작되고 mount플래시 드라이브가 실제로 /var/lib/docker.

그러면 Docker 플래시 드라이브가 일종의 휴대용이 됩니다. PC가 실행 중인 동안에만 제거하면 안 됩니다. 먼저 Docker를 중지하고 마운트 해제한 다음 제거하십시오. 그렇지 않으면 파일 시스템이 손상될 위험이 있으며 Docker는 결국 충돌할 것입니다.

관련 정보