Estou analisando a noção de vault rodando sob swarm (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 eu quero executar isso no enxame como um serviço, parece não haver como especificar a IPC_LOCK
capacidade, a fim de bloquear a troca criptografada para o serviço de cofre neste caso.
Como posso definir sinalizadores --cap-add ao iniciar um serviço de modo de enxame com o docker service create
comando?
A partir de 20.10, isso está disponível
docker service create
em--cap-add
:Ou em um arquivo de composição usado com
docker stack deploy
a mesma sintaxe do arquivo da versão 2:[Resposta original anterior às 20h10]
Atualmente não é suportado, mas o Docker está trabalhando em uma solução. A lógica por trás de não incluir a
--cap-add
opção cegamente está em um cluster grande, pode haver preocupações de segurança de um gerente que envia contêineres com privilégios adicionais para um trabalhador. O trabalhador pode confiar na execução de contêineres seguros que não podem acessar o host, mas não deseja permitir o acesso root remoto ao host por meio de um contêiner privilegiado.A discussão sobre isso acabou no github em:
https://github.com/docker/docker/pull/26849#issuecomment-252704844
https://github.com/docker/swarmkit/issues/1030
https://github.com/docker/swarmkit/pull/1722
https://github.com/moby/moby/issues/25885#issuecomment-557790402 e https://github.com/docker/cli/pull/2199
Todas as outras respostas aqui são antigas. O Docker 20.10.0 e mais recente agora oferece suporte à especificação de recursos para serviços Swarm por meio da
docker service
linha de comando e do formato de arquivo Docker Stack YAML .Na linha de comando, basta especificar
--cap-add [capability]
ou--cap-drop [capability]
.E aqui está um exemplo para adicionar um recurso em um arquivo Docker Stack YAML:
Encontrei uma solução para resolver o problema e posso usar
cap_net_admin
no modo enxame.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
CAP_NET_ADMIN
ao meu tempo de execução (usadonvidia-container-runtime
) wanyvic/nvidia-container-runtime .Depois disso, reconstruí-o, iniciei um contêiner (use o modo swarm), input:
capsh --print
e CAP_NET_ADMIN podem ser encontrados:Mas esse método não é bom.
Também não consigo definir
cap_add
oucap_drop
indocker-compose.yml
, mas não consigo encontrar uma maneira de resolvê-lo.Consulte https://hub.docker.com/r/ixdotai/swarm-launcher
Esse repositório é baseado neste comentário/ideia: https://github.com/moby/moby/issues/25885#issuecomment-573355530