2017-09-14 58 views
1
運行SQL腳本

我使用旁邊Dockerfile設置Postgres數據庫引擎內Dockerfile

FROM postgres:9.6.5 
ENV POSTGRES_USER postgres 
ENV POSTGRES_PASSWORD xxx 
ENV POSTGRES_DB postgres 
ADD localDump.sql /docker-entrypoint-initdb.d 

我需要創建角色READ_ONLY CREATE作用;,然後再運行localDump.sql腳本。

那麼如何在Dockerfile中直接運行SQL腳本?

回答

3

======================== 正確答案開始 ================= =======

根據Postgres圖像文檔,您可以通過運行腳本或SQL文件來擴展原始圖像。

如果你想這樣做額外的初始化從這一個派生的圖像中,下/docker-entrypoint-initdb.d添加一個或多個* .SQL,* .sql.gz,或* .SH腳本(如有必要,創建目錄)。在入口點調用initdb創建默認的postgres用戶和數據庫之後,它將運行任何* .sql文件並獲取該目錄中找到的任何* .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 

您應該找到如何從bash中爲Postgres運行SQL查詢,然後在您的Dockerfile中添加一條RUN指令。

+0

我以前試過這個命令,但是它沒有工作,這個命令「RUN psql ...」給了我下一個錯誤>>> psql:無法連接到服務器:沒有這樣的文件或目錄 \t服務器在本地運行並接受在Unix域套接字「/var/run/postgresql/.s.PGSQL.5432」上的連接 \t? –

+0

你可以嘗試運行這個:'docker exec -it CONTAINER_ID bash' 然後從容器內部檢查相同的命令嗎? –

+0

我怎麼能在Dockerfile裏面運行「docker ...」(這是不可能的),但是如果你要求用現有的postgres容器運行它而不是從docker文件運行,所以我可以說是的,它的工作原理和我曾試過「psql -h localhost - U postgres -c「SELECT COUNT(*)FROM xxx;」「它給了我預期的結果 –