Se eu uso docker exec para rodar um comando dentro de um container em execução, esse comando herda os mesmos namespaces e cgroups do processo principal? E como faço para expor uma porta adicional depois que o container já foi criado?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Se eu uso docker exec para rodar um comando dentro de um container em execução, esse comando herda os mesmos namespaces e cgroups do processo principal? E como faço para expor uma porta adicional depois que o container já foi criado?
Oi, Kayo!
O docker exec e o compartilhamento de Namespaces e Cgroups:
A resposta curta é: Sim, o comando executado via docker exec compartilha os mesmos Namespaces e Cgroups do processo principal (o PID 1 do container).
Pra entender melhor, imagine que o container é uma "caixa" com paredes invisíveis. Quando você usa o docker exec:
/bin/bash) entre nos mesmos Namespaces que o container já possui. Isso significa que o novo processo verá a mesma rede (Network Namespace), os mesmos arquivos (Mount Namespace) e a mesma árvore de processos (PID Namespace) que o processo original.top dentro do exec, você consegue ver o processo sleep que iniciou com o container.exec não pode ultrapassar esse valor.É possível expor uma porta adicional após a criação do container?
Aqui temos uma característica importante do Docker: Não é possível mapear ou expor novas portas em um container que já está em execução ou criado.
O mapeamento de portas (-p ou --publish) é uma configuração feita no momento da criação do container (docker run ou docker create). Isso acontece porque o Docker precisa configurar regras de tradução de endereços (NAT) no firewall do sistema hospedeiro (iptables/nftables) no instante em que o container sobe.
Se você esqueceu de expor uma porta, as abordagens comuns são:
docker run -d -p 80:80 -p 8080:8080 --name meu-container imagem-exemplo
docker commit e depois iniciar um novo container a partir dessa imagem com as novas portas.O fato de você ter notado que o arquivo persiste após um stop/start, mas some após um rm, mostra que você já captou a efemeridade do sistema de arquivos do container.
Perfeito!
Entendi!
Muito obrigado!