O problema é que o Dockerfile postgres declara "/var/lib/postgresql/data" como um volume. Este é apenas um diretório normal que vive fora do Union File System usado por imagens. Os volumes permanecem ativos até que nenhum contêiner seja vinculado a eles e sejam excluídos explicitamente.
Você tem poucas escolhas:
- Use o
--volumes-from
comando para compartilhar dados com novos contêineres. Isso só funcionará se houver apenas uma imagem postgres em execução por vez, mas é a melhor solução. - Escreva seu próprio Dockerfile que cria os dados antes de declarar o volume. Esses dados serão copiados para o volume quando o contêiner for criado.
- Escreva um ponto de entrada ou script cmd que preencha o banco de dados em tempo de execução.
Todas essas sugestões exigem que você use Volumes para gerenciar os dados quando o contêiner estiver em execução. Alternativamente, você pode escrever seu próprio Dockerfile e simplesmente não declarar um volume. Você poderia então usar
docker commit
para criar uma nova imagem depois de adicionar dados. Isso provavelmente funcionará a curto prazo, mas definitivamente não é como você deve trabalhar com contêineres - não é repetível e você acabará por ficar sem camadas no Union File System. Dê uma olhada nos documentos oficiais do Docker sobre como gerenciar dados em contêineres para obter mais informações.