web-dev-qa-db-ger.com

Laden Sie den Postgres-Dump, nachdem Sie den Docker erstellt haben

Ich habe eine dump.sql-Datei, die ich mit docker-compose laden möchte.

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

Meine Dockerfile.db ist im Moment sehr einfach:

FROM postgres
MAINTAINER me <[email protected]>

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

Ich möchte irgendwann einen Befehl wie psql my_db_name < dump.sql ausführen. Wenn ich ein Skript wie dieses in der Dockerfile.db ausführe, besteht das Problem darin, dass das Skript nach dem Erstellen, aber vor docker-compose up ausgeführt wird und die Datenbank noch nicht ausgeführt wird.

Irgendeine Idee, wie das geht?

10
clemkoa

Lesen Sie https://hub.docker.com/_/postgres/ , und lesen Sie den Abschnitt 'Dieses Image erweitern', um zu erklären, dass alle SQL-Dateien in /docker-entrypoint-initdb.d nach dem Erstellen ausgeführt werden.

Ich musste nur meine Dockerfile.db ändern in:

FROM postgres

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

Und es funktioniert!

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