web-dev-qa-db-fra.com

Charger Postgres dump après le menu fixe

J'ai un fichier dump.sql que je voudrais charger avec docker-compose.

docker-compose.yml:

services:
  postgres:
    environment:
      POSTGRES_DB: my_db_name
      POSTGRES_USER: my_name
      POSTGRES_PASSWORD: my_password
    build:
      context: .
      dockerfile: ./devops/db/Dockerfile.db

Mon Dockerfile.db est très simple pour le moment:

FROM postgres
MAINTAINER me <[email protected]>

COPY ./devops/db ./devops/db
WORKDIR ./devops/db

Je voudrais exécuter une commande comme psql my_db_name < dump.sql à un moment donné. Si j'exécute un script comme celui-ci à partir du fichier Dockerfile.db, le problème est que le script est exécuté après la construction, mais avant le docker-compose up, et que la base de données n'est pas encore en cours d'exécution.

Une idée comment faire ça?

10
clemkoa

Si vous lisez https://hub.docker.com/_/postgres/ , la section "Extension de cette image" explique que tout fichier .sq de /docker-entrypoint-initdb.d sera exécuté après la génération.

Je devais juste changer mon Dockerfile.db en:

FROM postgres

ADD ./devops/db/dummy_dump.sql /docker-entrypoint-initdb.d

Et il fonctionne!

24
clemkoa
CONTAINER_NAME="postgres"
DB_USER=postgres
LOCAL_DUMP_PATH="..."
docker run --name "${CONTAINER_NAME}" postgres
docker exec -i "${CONTAINER_NAME}" psql -U "${DB_USER}" < "${LOCAL_DUMP_PATH}"
1
Milso
Sudo docker exec postgres psql -U postgres my_db_name < dump.sql
1
Valentin Kantor