/proc/sys/vm/drop_caches에 쓰려면 어떤 Linux 기능이 필요합니까?

/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?

답변1

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

그것이 내 목적을 위한 것입니다.

도움이 되는 답변에 진심으로 감사드립니다!

답변2

파일 proc시스템은 기능, ACL 또는 사용법을 지원하지 않습니다 chmod. Unix 권한은 호출 프로세스가 액세스할 수 있는지 여부를 결정합니다. 따라서 루트만 이 파일에 쓸 수 있습니다. 사용자 네임스페이스의 경우 이는 전역 루트(원래 네임스페이스의 루트)입니다. 컨테이너의 루트는 sysctl 설정을 변경할 수 없습니다.

내가 아는 한, 권한이 없는 네임스페이스 내부에서 sysctl 설정을 변경하는 유일한 해결책은 통신 채널(예: 소켓 또는 파이프)을 외부로 정렬하고 수신 프로세스가 컨테이너 외부의 루트로 실행되도록 하는 것입니다.

답변3

방금 다음을 테스트했습니다.

docker run -ti --rm -v /proc:/writable_proc rhel bash
echo 3 > /writable_proc/sys/vm/drop_caches

게다가 실패합니다:

bash: /writable_proc/sys/vm/drop_caches: Permission denied

나는 권한을 가지고 그것을 실행합니다 :

docker run -ti --rm --privileged -v /proc:/writable_proc rhel bash
echo 3 > /writable_proc/sys/vm/drop_caches

또한 모든 것이 작동하므로 Gilles의 데몬이나 cli가 Gilles가 모르는 사이에 권한을 사용하도록 구성되어 있기 때문에 Gilles에 대해 모든 것이 작동하고 있다고 확신합니다.

관련 정보