2016-04-21 21 views
7

Tôi có một tệp dump.sql mà tôi muốn tải bằng docker-compose.Tải Postgres dump sau khi docker-compose lên

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 

My Dockerfile.db thực sự đơn giản ở thời điểm hiện tại:

FROM postgres 
MAINTAINER me <[email protected]> 

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

Tôi muốn chạy một lệnh như psql my_db_name < dump.sql tại một số điểm. Nếu tôi chạy một kịch bản như thế này từ Dockerfile.db, vấn đề là kịch bản được chạy sau khi xây dựng nhưng trước docker-compose up và cơ sở dữ liệu chưa chạy.

Bất kỳ ý tưởng nào về cách thực hiện việc này?

+1

Nói chung, tôi đã thực hiện điều này bằng cách viết một tập lệnh bash mà một docker-compose up -d, sau đó một docker-compose exec db_service_name với lệnh để thực hiện kết xuất SQL. –

Trả lời

13

Đọc https://hub.docker.com/_/postgres/, phần 'Mở rộng hình ảnh này' giải thích rằng bất kỳ .sql nào trong /docker-entrypoint-initdb.d sẽ được thực thi sau khi xây dựng.

Tôi chỉ cần phải thay đổi Dockerfile.db tôi để:

FROM postgres 

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

Và nó hoạt động!

Các vấn đề liên quan