
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는 결국 충돌할 것입니다.