Como definir recursos do Linux em chamadas de serviço do modo de enxame do docker

4

Eu estou olhando para a noção de cofre rodando sob enxame (1.12.x).

Um único contêiner seria iniciado com: docker run -d --cap-add IPC_LOCK -p 8200:8200 -p 8215:8125 --name vault --volume /vagrant/vault:/vagrant/vault vault server -config=/path/to/vault.hcl

mas quando quero executar isso como um serviço, parece não haver maneira de especificar o recurso IPC_LOCK , a fim de bloquear a troca criptografada para o serviço do cofre neste caso.

Como posso definir --cap-adicionar sinalizadores ao iniciar um serviço de modo swarm com o comando docker service create ?

    
por volvox 06.01.2017 / 00:38

2 respostas

4

Atualmente não é suportado, mas o Docker está trabalhando em uma solução. A lógica por trás da não inclusão cega da opção --cap-add é em um cluster grande, pode haver preocupações de segurança de um gerenciador enviar contêineres com privilégios adicionados a um trabalhador. O funcionário pode confiar na execução de contêineres seguros que não podem acessar o host, mas não deseja permitir acesso remoto remoto ao host por meio de um contêiner privilegiado.

Discussão sobre isso acabou no github em:

link

link

link

    
por 06.01.2017 / 03:50
0

Eu encontrei uma solução para resolver o problema e posso usar cap_net_admin no modo swarm.

Você pode modificar o código-fonte do tempo de execução para adicionar os recursos necessários (será uma configuração padrão local).

Por exemplo, adicionei o CAP_NET_ADMIN ao meu tempo de execução (use nvidia-container-runtime ) wanyvic / nvidia-container-runtime .

Depois que eu reconstruí-lo, iniciei um container (use o modo swarm), input: capsh --print e CAP_NET_ADMIN podem ser encontrados:

root@25303a54ebb3:/# capsh --print
Current:=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_admin,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+eip
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_admin,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=0(root)
gid=0(root)
groups=

Mas esse método não é bom.

Eu também não consigo definir cap_add ou cap_drop em docker-compose.yml , mas não consigo encontrar uma maneira de resolvê-lo.

    
por 25.10.2018 / 13:57