簡體   English   中英

初始化postgres數據庫(不使用/docker-entrypoint-initdb.d)

[英]Initialize postgres database (without using /docker-entrypoint-initdb.d)

我試圖在不使用入口點目錄的情況下初始化數據庫。

這是最小的Dockerfile:

FROM postgres:latest

POSTGRES_DB db
POSTGRES_USER user
POSTGRES_PASSWORD password

ADD db.sql /directory/
ADD script.sh /directory/

CMD ["sh", "/directory/script.sh"] 
# Or ENTRYPOINT ["/directory/script.sh"]?

script.sh

psql -d db -U user < /directory/db.sql

這不起作用,因為運行腳本時postgres沒有啟動。

如何在不使用/docker-entrypoint-initdb.d情況下運行db.sql

如果查看標准的postgres映像的入口點腳本 ,支持/docker-entrypoint-initdb.d目錄的機制非常復雜:它需要引導數據庫目錄以及初始用戶和數據庫,然后它將在后台啟動數據庫服務器並運行該目錄中的所有內容,最后運行數據庫。 如果要復制此設置,則必須自己完成所有這些步驟。

但是,還有其他方法可以建立數據庫。 您可以創建一個空數據庫,然后正常運行應用程序的遷移以創建初始架構。 如果您有一個通常在運行psql客戶端工具的數據庫上運行的SQL文件,則可以使用Docker執行完全相同的操作

docker run -d -p 5432:5432 --name postgres postgres:12
psql -h localhost < db.sql

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM