
我嘗試將 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 金鑰,並且權限設定為 user:user,而不是 root:root,所以可能它來自這裡。但我覺得奇怪的是,docker 服務(我猜是由 root 運行的)不能使用 user:user 儲存。
如果我嘗試使用 root 使用者手動安裝 USB。我創建的 /media/user/MYUSB 資料夾設定為 root:root,直到我在其上安裝 USB:其所有者更改為 user:user。
我有點不安,因為似乎我是唯一一個在網路上遇到這個問題的人,儘管它似乎不是一個不尋常的配置。
答案1
透過嘗試一些東西,我推斷您的 USB 隨身碟具有 FAT32 或其他不支援 POSIX 權限的檔案系統。您不能在 Docker 中使用類似的檔案系統。但這還不是全部!
自動掛載的檔案系統也不適合 Docker,因為它們是用諾蘇伊德和諾德夫。 Linux 根檔案系統(Docker 映像中常見的檔案系統)無法正確放置在其上。您可以使用檢查這些mount | grep media
。 (自動安裝通常使用優盤2這些日子。
首先,您應該在隨身碟上放置一個適當的檔案系統(例如外部4)。
然後,您必須確保優盤2不掛載檔案系統(使用不適當的選項並且為時已晚)。您可以使用烏德夫使其忽略檔案系統的規則:
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
(再次使用 UUID)以確保 USB 隨身碟安裝得足夠早。也無需擺弄任何 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 最終會崩潰。