Proc
為了寫入 /proc/sys/vm/drop_caches,我需要哪種 Linux 功能?
我正在嘗試從 docker 容器中清除我的文件系統記憶體,如下所示:
docker run --rm ubuntu:vivid sh -c "/bin/echo 3 > /proc/sys/vm/drop_caches"
如果我執行這個命令,我會得到
sh: 1: cannot create /proc/sys/vm/drop_caches: Read-only file system
這是預期的,因為我無法
/proc
從容器內部寫入。現在當我打電話
docker run --rm --privileged ubuntu:vivid sh -c "/bin/echo 3 > /proc/sys/vm/drop_caches"
它可以工作,這對我來說也很有意義,因為
--privileged
容器可以(幾乎)在主機上做任何事情。我的問題是:如何找出我需要在命令中設置的 Linux 功能
docker run --rm --cap-add=??? ubuntu:vivid sh -c "/bin/echo 3 > /proc/sys/vm/drop_caches"
為了使這項工作無需設置
--privileged
?
proc
文件系統不支持功能、ACL,甚至不支持使用chmod
. Unix 權限決定呼叫程序是否可以訪問。因此,只有 root 可以寫入該文件。對於使用者命名空間,這就是全域根(原始命名空間中的那個);容器中的 root 無法更改 sysctl 設置。據我所知,從非特權命名空間內部更改 sysctl 設置的唯一解決方案是安排與外部的通信通道(例如套接字或管道),並讓偵聽程序在容器外部以 root 身份執行。
作為 Gilles 接受的答案的附錄:在使用 docker 時,我設法以一種更簡單的方式實現了我的
/proc/sys/vm/drop_caches
目標/proc
:docker run -ti --rm -v /proc:/writable_proc ubuntu:vivid bash # echo 3 > /writable_proc/sys/vm/drop_caches
這是為了我的目的。
非常感謝您的有用回答!