Proc

為了寫入 /proc/sys/vm/drop_caches,我需要哪種 Linux 功能?

  • July 24, 2017

我正在嘗試從 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

這是為了我的目的。

非常感謝您的有用回答!

引用自:https://unix.stackexchange.com/questions/209244