Eu criei um contêiner docker fastAPI e ele está funcionando bem, a menos que haja 1 comando...
Preciso dele para reiniciar outro contêiner docker quando algum evento acontecer.
Eu tenho um servidor [host], executando o docker, o docker está executando o containerA (fastAPI) e o containerB ...
Como posso fazer com que o containerA execute um comando que fará com que o host execute este comando:
docker reiniciar contêinerB
Observe que o sistema operacional host é Linux.
Tentei usar subprocess.run() do python, mas não funcionou, é claro, o containerA não tem o docker instalado, então é claro que não tem comandos do docker.
Eu li artigos dizendo que a montagem do soquete unix funcionará, tentei montar '/var/run/docker.sock:/var/run/docker.sock', mas não funcionou tão bem.
Se você tiver uma idéia de como fazer isso funcionar, ficarei grato.
Obrigado.
Este seria um design melhor para montar, vincular um diretório, criar um arquivo na montagem entre o host e o contêiner e, a partir do host, procurar alterações neste diretório e, em seguida, reiniciar o contêiner do docker.
Para vincular a montagem, como de costume no host:
No host, verifique o diretório:
Do contêiner:
Mesmo que seja tecnicamente possível compartilhar o soquete do docker para executar comandos do docker dentro de contêineres, os especialistas do docker sugerem não fazer isso por motivos de segurança.
Leia sobre DooD e DinD , talvez
podman
seja melhor para segurança se você insistir em usar essa abordagem.podman
não tem um serviço root rodando comodocker
.A montagem
/var/run/docker.sock
dentro do contêiner é a abordagem usual para isso, desde que você se sinta confortável em expor o daemon Docker do seu host ao contêiner . Para que isso funcione, você também precisa garantir que o binário do cliente Docker (docker
) esteja disponível dentro do contêiner; no seu caso não é, você precisa adicioná-lo à imagem.