PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

docker postgres com dados iniciais não é persistido em commits


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.