簡體   English   中英

將 docker-compose 中的環境變量用於 postgres 的 initdb

[英]Use environment variables in docker-compose for initdb of postgres

我想使用放在/docker-entrypoint-initdb.d/中的*.sql腳本構建我的基本數據庫

我的 SQL 文件如下所示:

create schema crm;
alter schema crm owner to ${CRM_SCHEMA_OWNER};
....

當然,使用 psql 導入並不能解析變量。 我現在的問題是,我怎樣才能使用這樣的環境變量?

我嘗試在入口點目錄中也有一個 .sh 文件,用環境數據替換.sql文件中的字符串,但我總是得到:

db_1 | sed:無法打開臨時文件/docker-entrypoint-initdb.d/sedjKqYgZ:權限被拒絕

我什至試過

COPY sql/*.sql /mydata/
RUN ln -sf /mydata/*.sql /docker-entrypoint-initdb.d/

在 Dockerfile 和/docker-entrypoint-initdb.d/我的.sh腳本中

sed -i "s/__CRM_SCHEMA_OWNER__/$CRM_SCHEMA_OWNER/g" /mydata/01_create_crm.sql

但這也沒有用。

關於如何使用環境變量設置數據庫的任何建議?

謝謝弗里茨

目前 postgres docker 圖像將運行 /docker-entrypoint-initdb.d/ 中的 shell 腳本以及 SQL 腳本。 你可以這樣寫:

#!/bin/bash

psql -U ${POSTGRES_USER} <<-END
    create schema crm;
    alter schema crm owner to ${CRM_SCHEMA_OWNER};
END

例如,在一個名為create_crm_schema.sh的文件中。

來自官方 postgres docker 圖像文檔

如果您想在從該鏡像派生的鏡像中進行額外的初始化,請在 /docker-entrypoint-initdb.d 下添加一個或多個 *.sql、*.sql.gz 或 *.sh 腳本(必要時創建目錄)。 在入口點調用 initdb 以創建默認的 postgres 用戶和數據庫后,它將運行任何 *.sql 文件,運行任何可執行的 *.sh 腳本,並獲取在該目錄中找到的任何不可執行的 *.sh 腳本以在之前進行進一步初始化啟動服務。

暫無
暫無

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

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