Não encontrei uma maneira de automatizar a execução de um comando dentro de um contêiner do Docker recém-criado. Costumo criar contêineres descartáveis (como ambientes de teste, amostras abaixo) que se beneficiam de alguns pacotes adicionais e podem precisar de uma atualização antes que o software possa ser instalado.
Prefiro executar o comando diretamente em uma sessão interativa.
docker run --interactive --tty --rm fedora bash
docker run --interactive --tty --rm ubuntu bash
Atualmente, continuo colando comandos (incluindo apt update && apt upgrade -y
e dnf update -y
) no shell do contêiner.
Uma maneira de fazer isso, pelo menos para contêineres “temporários”, é manter um
sleep
comando em execução no contêiner após os comandos de configuração e, em seguida, executar um shell no contêiner em execução:Há um pequeno inconveniente com essa abordagem, que é que o shell interativo será iniciado antes que a atualização/atualização seja concluída. Você também não poderá ver a
apt-get
saída, a menos que anexe um terminal ao contêiner (em uma janela diferente).Você também pode executar um shell interativo após seus comandos de configuração:
Como uma variação da resposta de Stephen Kitt (você ainda precisa fazer
bash -c bash
), você pode colocar os comandos de inicialização em um arquivo, montar esse arquivo em algum lugar do contêiner e definirBASH_ENV
esse local.Por exemplo, digamos que você tenha:
Então:
Ou você também pode colocar
bash
como o último comando no script e executarbash -c exit
.