다른 스토리지 드라이버를 사용하기 위해 Docker를 마이그레이션하는 방법은 무엇입니까?

다른 스토리지 드라이버를 사용하기 위해 Docker를 마이그레이션하는 방법은 무엇입니까?

btrfs 스토리지 드라이버를 사용하여 도커를 실행하는 서버가 있습니다. 다른 스토리지 드라이버를 사용하도록 마이그레이션하려면 어떻게 해야 합니까? 오버레이2를 사용하고 싶습니다.

지침에 따라 마이그레이션을 시도했습니다.여기:

  • 도커 중지

  • /var/lib/docker의 이름을 /var/lib/docker.bak로 바꿉니다.

  • /etc/docker/daemon.json에 {"storage-driver": "overlay2"}를 추가하세요.

  • /var/lib/docker.bak를 /var/lib/docker에 복사합니다(btrfs 스냅샷을 "제거"하기 위해).

  • 도커 시작

하지만 이 마이그레이션 후에는 더 이상 컨테이너가 존재하지 않습니다.

나는 디렉토리에 여전히 데이터가 있고 /var/lib/docker/btrfs안에 있지 않기 때문에 가정합니다 /var/lib/docker/overlay2(다른 "레이아웃"을 가지고 있으므로 btrfs의 이름을 overlay2로 바꾸는 것은 불가능합니다).

자동으로 시작된 컨테이너가 여전히 존재하고 자동으로 시작되도록 한 스토리지 드라이버에서 다른 스토리지 드라이버로 마이그레이션하려면 어떻게 해야 합니까?

답변1

하위 볼륨은 일반적으로 많은 작업을 필요로 하지 않습니다(이론적으로는 btrfs에 대한 Fedora 문서를 기반으로 함). 가능해야 rm -r /var/lib/docker/subvolumes/*하지만 어떤 이유로든 - docker어두운마법 - 이건 작동하지 않아요.

TLDR: 내가 찾은 다음 스크립트를 사용했습니다.이 요지에모든 하위 볼륨을 제거하려면/var/lib/docker/btrfs/subvolumes

  • echo "Deleting: $subvolume"전체 시스템을 불태우지 않도록 하기 위해 약간 수정했습니다.

! 이를 실행하기 전에 컨테이너의 모든 중요한 데이터를 호스트에 바인드 마운트했는지 확인하십시오. 다음은 모든 컨테이너 계층을 제거하기 때문입니다.

for subvolume in /var/lib/docker/btrfs/subvolumes/*; do
    echo "Deleting: $subvolume"
    # Uncomment the next line after you've verified the list is correct.
    # btrfs subvolume delete $subvolume
done

관련 정보