簡體   English   中英

docker 容器內的 overlayfs

[英]overlayfs inside docker container

是否可以在(特權)docker 容器內安裝覆蓋文件系統? 至少我在容器外運行良好的直覺方法失敗了:

> mkdir /tmp/{up,low,work,merged}
> mount -t overlay overlay -o lowerdir=/tmp/low/,upperdir=/tmp/up/,workdir=/tmp/work/ /tmp/merged/
mount: /tmp/merged: wrong fs type, bad option, bad superblock on overlay, missing codepage or helper program, or other error.

附加信息:

  • Docker 版本 18.09.1,構建 4c52b90
  • Kernel 4.19.0-8-amd64
  • Debian 10(主機和 docker-image)

這是一個猜測,但我懷疑這是因為 docker 已經在使用 overlayfs 而 overlayfs 拒絕使用upperdir作為另一個 overlayfs。

我懷疑這可能是由於whiteout 文件造成的:

為了在不更改下層文件系統的情況下支持 rm 和 rmdir,覆蓋文件系統需要在上層文件系統中記錄文件已被刪除。 這是使用 whiteouts 和不透明目錄完成的(非目錄總是不透明的)。

whiteout 被創建為具有 0/0 設備號的字符設備。 當在合並目錄的上層發現 whiteout 時,將忽略下層中的任何匹配名稱,並且 whiteout 本身也被隱藏。

要刪除存在於 lowerdir 中的文件,overlayfs 將創建一個 whiteout 文件並隱藏所有whiteout 文件(設備號0,0 )。 這在邏輯上意味着您不能在 overlayfs 中創建編號為0,0的字符設備文件,因為它必須被 overlayfs 本身隱藏。

如果您被允許使用 overlayfs 作為upperdir ,它將無法創建中斷文件,因此將無法rmrmdir來自較低層的任何文件。 因為它不能在另一個overlayfs上創建編號為0,0的字符設備文件。

找到了一些有用的東西。 將 workdir 和 upperdir 安裝為 tmpfs 對我有用:像這樣:

> mkdir /tmp/overlay
> mkdir /tmp/{low,merged}
> mount -t tmpfs tmpfs /tmp/overlay
> mkdir /tmp/overlay/{up,work}
> mount -t overlay overlay -o lowerdir=/tmp/low/,upperdir=/tmp/overlay/up/,workdir=/tmp/overlay/work/ /tmp/merged/ 

我仍然有興趣解釋為什么在 docker 容器中創建不帶 tmpfs 的覆蓋失敗?

如何在 docker 容器內安裝 overlayfs:

https://gist.github.com/detunized/7c8fc4c37b49c5475e68ef9574587eee

基本上,您需要使用 --privileged 或更安全的 --cap-add=SYS_ADMIN 運行容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM