繁体   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