USBストレージからDockerを実行する

USBストレージからDockerを実行する

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) を接続して Docker サービスを開始すると、失敗します。

$ 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 としてマウントします (Docker データの保存には使用しません)。

私のシステムは USB キーをマウントし、権限は root:root ではなく user:user に設定されているため、おそらくここから来ているのでしょう。しかし、docker サービス (root によって実行されると思われます) が user:user ストレージを使用できないのは不思議です。

ルート ユーザーで USB を手動でマウントしようとすると、作成した /media/user/MYUSB フォルダーは、USB をマウントするまでは root:root に設定され、所有者は user:user に変更されます。

珍しい設定ではないようですが、インターネット上でこの問題に遭遇したのは私だけのようなので、少し当惑しています。

答え1

いろいろ試してみた結果、USB フラッシュ ドライブには FAT32 または POSIX 権限をサポートしていない別のファイル システムが搭載されていることがわかりました。そのようなファイル システムは Docker では使用できません。しかし、それだけではありません。

自動マウントされたファイルシステムもDockerには適していません。ノースイドそしてノード. Linux ルートファイルシステム (Docker イメージ内によく含まれるもの) は、適切に配置できません。 を使用して確認できますmount | grep media。 (自動マウントは通常、udisks2最近。)

まず、フラッシュドライブに適切なファイルシステムを配置する必要があります(たとえば拡張子4)。

次に、次の点を確認する必要があります。udisks2ファイルシステムをマウントしません(不適切なオプションと遅すぎるため)。ユーデブファイルシステムを無視するルール:

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 がクラッシュすることになります。

関連情報