AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 824516
Accepted
volvox
volvox
Asked: 2017-01-06 15:38:06 +0800 CST2017-01-06 15:38:06 +0800 CST 2017-01-06 15:38:06 +0800 CST

Como definir recursos do Linux em invocações de serviço no modo Docker Swarm

  • 772

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_LOCKcapacidade, 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 createcomando?

docker docker-swarm
  • 4 4 respostas
  • 13119 Views

4 respostas

  • Voted
  1. Best Answer
    BMitch
    2017-01-06T18:50:31+08:002017-01-06T18:50:31+08:00

    A partir de 20.10, isso está disponível docker service createem --cap-add:

    $ docker service create --help
    ...
          --cap-add list                       Add Linux capabilities
          --cap-drop list                      Drop Linux capabilities
    

    Ou em um arquivo de composição usado com docker stack deploya mesma sintaxe do arquivo da versão 2:

    version: "3.9"
    services:
      app:
        image: your-image:tag
        cap_add:
        - CAP_NAME1
        - CAP_NAME2
        cap_drop:
        - CAP_NAME3
        - CAP_NAME4
    

    [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-addopçã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

    • 11
  2. James Mishra
    2021-01-03T13:17:25+08:002021-01-03T13:17:25+08:00

    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 servicelinha 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:

    version: "3.9"
    services:
      your-service:
        cap_add:
          - CAP_SYS_ADMIN
    
    • 9
  3. wany
    2018-10-26T03:57:42+08:002018-10-26T03:57:42+08:00

    Encontrei uma solução para resolver o problema e posso usar cap_net_adminno 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_ADMINao meu tempo de execução (usado nvidia-container-runtime) wanyvic/nvidia-container-runtime .

    Depois disso, reconstruí-o, iniciei um contêiner (use o modo swarm), input: capsh --printe 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.

    Também não consigo definir cap_addou cap_dropin docker-compose.yml, mas não consigo encontrar uma maneira de resolvê-lo.

    • -1
  4. Mark Rajcok
    2020-03-05T10:14:16+08:002020-03-05T10:14:16+08:00

    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

    Dependendo do caso de uso, uma solução alternativa é vincular a montagem /var/run/docker.sockdo(s) host(s) do enxame ao serviço e, em seguida, executar docker run --privileged ...ou docker run --cap-add ...do serviço para executar seus comandos privilegiados reais. (Você terá que instalar o docker cli na imagem do serviço.) O contêiner mais interno que você executar docker dessa maneira terá os privilégios/recursos do host do enxame em vez do serviço, e o serviço se tornará apenas um fino camada de contêiner.

    • -1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve