別のストレージ ドライバーを使用するために docker を移行するにはどうすればよいですか?

別のストレージ ドライバーを使用するために docker を移行するにはどうすればよいですか?

btrfs ストレージ ドライバーを使用して docker を実行しているサーバーがあります。別のストレージ ドライバーを使用するように移行するにはどうすればよいですか? overlay2 を使用したいと思います。

指示に従って移行を試みたここ:

  • ドッカーを停止する

  • /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

関連情報