Você está substituindo o
command
original e você não inicia o postgres neste script e é por isso que seu banco de dados não está disponível. Você pode colocar a inicialização do banco de dados no diretório de ponto de entrada do contêiner:
/docker-entrypoint-initdb.d
. Isso executa todos os *.sh
e *.sql
arquivos neste diretório e não toca no command
original .Todos os arquivos neste diretório são executados automaticamente em ordem alfabética na criação do contêiner . Portanto, crie um volume para adicionar seus scripts/arquivos sql ao ponto de entrada e deixe o contêiner executá-los. Isso está descrito na documentação oficial do postgres, seção "Como estender esta imagem" .
Seu arquivo de composição muda para algo assim:
postgres:
build: ./postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
- ./db-init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
enquanto um diretório local, por exemplo
db-init-scripts
, contém seus scripts de inicialização (renomeie-o se desejar). Copie create_db.sh
para esta pasta e será executado automaticamente quando você criar um novo container. Várias imagens de banco de dados observam esse diretório de ponto de entrada, o que é muito conveniente.
Seu
container_name: postgres
parece redundante.