Ao trabalhar com um arquivo Docker Compose, pode ser necessário executar um comando específico apenas uma vez, geralmente durante a configuração inicial de um aplicativo. Este requisito surge quando a aplicação depende de um banco de dados que precisa ser inicializado, e a inicialização deve ocorrer somente na primeira execução.
Neste caso, o usuário pretende executar o comando ./my-project - configuração para adicionar as informações necessárias ao banco de dados. Para conseguir isso, é recomendado incorporar um script de ponto de entrada no contêiner.
Um script de ponto de entrada fornece um mecanismo para executar comandos personalizados antes de iniciar o aplicativo principal. Dentro do script do ponto de entrada é possível verificar se o banco de dados já foi inicializado. Se a inicialização for necessária, o script poderá executar as etapas de configuração.
Essa abordagem garante que o comando de inicialização seja executado apenas uma vez, mesmo se o contêiner for reiniciado ou o serviço for ampliado.
Para implementar esta solução, modifique o arquivo docker-compose.yml para incluir o seguinte script no serviço my_project definição:
services: my_project: build: . volumes: - data:/app ports: - "6060:8080" depends_on: - mongo entrypoint: ["/app/entrypoint.sh"]
Neste caso, data é o volume que contém o código do aplicativo e entrypoint.sh é o script do ponto de entrada.
Crie um script entrypoint.sh com o seguinte conteúdo:
#!/bin/bash # Check if database is initialized. mongo mongo://admin:admin@mongo:27017/my_project --eval "db.user.findOne()" > /dev/null 2>&1 # If the database is not initialized, perform setup. if [ $? -ne 0 ]; then /app/my_project -setup fi # Start the application. /app/my_project
Neste script, mongo é o nome do host do contêiner Mongo e my_project é o nome do banco de dados.
Este script verifica se um documento específico existe na coleção de usuários do banco de dados. Se o documento não existir, indica que o banco de dados não foi inicializado e o comando setup é executado. Caso contrário, o aplicativo inicia normalmente.
Observe que o usuário inicialmente usou um "contêiner somente de dados" para montar o volume do banco de dados. No entanto, esta abordagem não é mais necessária com o Docker 1.9 e posterior, que suporta volumes nomeados. Portanto, o contêiner mongodata pode ser removido do arquivo docker-compose.yml e o serviço mongo pode ser modificado para usar o volume nomeado diretamente.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3