fri*_*itz 8 postgresql environment-variables docker
我想使用*.sql放置的脚本构建我的基本数据库/docker-entrypoint-initdb.d/
我的 SQL 文件如下所示:
create schema crm;
alter schema crm owner to ${CRM_SCHEMA_OWNER};
....
Run Code Online (Sandbox Code Playgroud)
当然,使用 psql 导入并不能解析该变量。我现在的问题是,如何使用这样的环境变量?
我尝试在入口点目录中也有一个 .sh 文件,用.sql环境数据替换文件中的字符串,但我总是得到:
db_1 | sed:无法打开临时文件/docker-entrypoint-initdb.d/sedjKqYgZ:权限被拒绝
我什至尝试过
COPY sql/*.sql /mydata/
RUN ln -sf /mydata/*.sql /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 和我的.sh脚本中/docker-entrypoint-initdb.d/
sed -i "s/__CRM_SCHEMA_OWNER__/$CRM_SCHEMA_OWNER/g" /mydata/01_create_crm.sql
Run Code Online (Sandbox Code Playgroud)
但这也行不通。
关于如何使用环境变量设置数据库有什么建议吗?
谢谢弗里茨
目前,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
Run Code Online (Sandbox Code Playgroud)
create_crm_schema.sh例如在一个名为的文件中。
如果您想在从此镜像派生的镜像中进行其他初始化,请在 /docker-entrypoint-initdb.d 下添加一个或多个 *.sql、*.sql.gz 或 *.sh 脚本(如有必要,请创建该目录) )。在入口点调用 initdb 创建默认的 postgres 用户和数据库后,它将运行任何 *.sql 文件,运行任何可执行的 *.sh 脚本,并获取在该目录中找到的任何不可执行的 *.sh 脚本,以在之前进行进一步的初始化启动服务。
| 归档时间: |
|
| 查看次数: |
2628 次 |
| 最近记录: |