在Dockerfile中运行SQL脚本
我正在使用下一个Dockerfile来设置postgres数据库引擎
FROM postgres:9.6.5 ENV POSTGRES_USER postgres ENV POSTGRES_PASSWORD xxx ENV POSTGRES_DB postgres ADD localDump.sql /docker-entrypoint-initdb.d
我需要创buildROLE CREATE ROLE read_only; 在初始化数据库之前和运行localDump.sql脚本之前。
那么我怎么能直接在Dockerfile中运行SQL脚本?
======================== 正确答案开始 ======================= =
根据Postgres映像文档,您可以通过运行脚本或SQL文件来扩展原始映像。
如果您希望在从此映像派生的映像中执行额外的初始化操作,请在/docker-entrypoint-initdb.d下添加一个或多个* .sql,* .sql.gz或* .sh脚本(必要时创build该目录)。 在入口点调用initdb创build默认的postgres用户和数据库之后,它将运行任何* .sql文件,并在该目录中find任何* .sh脚本,以在启动服务之前进行进一步的初始化。
对于你的Dockerfile,你可以做这样的事情。
FROM postgres:9.6.5 ENV POSTGRES_USER postgres ENV POSTGRES_PASSWORD xxx ENV POSTGRES_DB postgres ADD create-role.sh /docker-entrypoint-initdb.d ADD localDump.sql /docker-entrypoint-initdb.d
您还需要使用create-role.sh脚本来执行plsql命令
#!/bin/bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL CREATE ROLE read_only; EOSQL
请注意,我不是一个SQL DBA,plsql命令只是一个例子。
======================== Correct Answer End ======================= =
留给后人的原始答案:
你可以使用psql
吗? 就是这样
FROM postgres:9.6.5 ENV POSTGRES_USER postgres ENV POSTGRES_PASSWORD xxx ENV POSTGRES_DB postgres RUN psql -U postgres -d database_name -c "SQL_QUERY" ADD localDump.sql /docker-entrypoint-initdb.d
你应该find如何从bash中运行PostgreSQL的SQL Query,然后在你的Dockerfile中添加一条RUN指令。