De qual capacidade do Linux eu preciso para gravar em / proc / sys / vm / drop_caches?

4

Estou tentando limpar meu cache do sistema de arquivos de dentro de um contêiner docker, da seguinte forma:

docker run --rm ubuntu:vivid sh -c "/bin/echo 3 > /proc/sys/vm/drop_caches"

Se eu executar este comando, obtenho

sh: 1: cannot create /proc/sys/vm/drop_caches: Read-only file system

que é esperado, pois não posso gravar em /proc de dentro do contêiner.

Agora, quando eu ligar

docker run --rm --privileged ubuntu:vivid sh -c "/bin/echo 3 > /proc/sys/vm/drop_caches"

funciona, o que também faz sentido para mim, pois o contêiner --privileged pode fazer (quase) qualquer coisa no host.

Minha pergunta é: como eu descubro qual recurso Linux eu preciso definir no comando

docker run --rm --cap-add=??? ubuntu:vivid sh -c "/bin/echo 3 > /proc/sys/vm/drop_caches"

para que isso funcione sem ter que definir --privileged ?

    
por Julius Blank 12.06.2015 / 14:52

3 respostas

5

O sistema de arquivos proc não suporta recursos, ACL ou até mesmo alterar permissões básicas com chmod . As permissões do Unix determinam se o processo de chamada obtém acesso. Assim, apenas o root pode gravar esse arquivo. Com namespaces de usuário, essa é a raiz global (aquela no namespace original); root em um contêiner não consegue alterar as configurações de sysctl.

Até onde eu sei, a única solução para alterar uma configuração sysctl de dentro de um espaço de nomes não privilegiado é arranjar um canal de comunicação com o exterior (por exemplo, um socket ou pipe), e ter o processo de escuta como root fora o recipiente.

    
por 13.06.2015 / 02:53
3

Como um adendo à resposta aceita por Gilles: Consegui atingir meu objetivo de escrever para /proc/sys/vm/drop_caches (ou para /proc em geral, para ser preciso) de maneira muito mais fácil ao trabalhar com o docker:

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

Isso é para o meu propósito.

Muito obrigado pela sua resposta útil!

    
por 13.06.2015 / 14:32
0

Acabei de testar o seguinte:

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

E falhou:

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

Eu corro com privilégios:

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

E, tudo funcionou, então tenho certeza de que, de alguma forma, as coisas funcionaram para Gilles porque seu daemon ou cli está configurado para usar privilégios sem saber:

    
por 24.07.2017 / 16:32