2016-05-02 49 views
1

試圖爲我的應用程序製作用於postgres數據庫的Dockerfile。使用postgres配置dockerfile

Dockerfile

FROM postgres:9.4 
RUN mkdir /sql 
COPY src/main/resources/sql_scripts/* /sql/ 
RUN psql -f /sql/create_user.sql 
RUN psql -U user -W 123 -f create_db.sql 
RUN psql -U user -W 123 -d school_ats -f create_tables.sql 

運行

docker build . 

結果:

Sending build context to Docker daemon 3.367 MB 
Step 1 : FROM postgres:9.4 
---> 6196bca94565 
Step 2 : RUN mkdir /sql 
---> Using cache 
---> 6f57c1e759b7 
Step 3 : COPY src/main/resources/sql_scripts/* /sql/ 
---> Using cache 
---> 3b496bfb28cd 
Step 4 : RUN psql -a -f /sql/create_user.sql 
---> Running in 33b2230a12fa 
psql: could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 
The command '/bin/sh -c psql -a -f /sql/create_user.sql' returned a non-zero code: 2 

我怎麼可以指定泊塢窗分貝爲我的項目?

+1

基礎dockerfile'Postgres的:9.4'直到入口點開始並沒有實際運行的Postgres。您需要首先從基本映像啓動容器。 –

回答

3

當建立您的碼頭圖像postgres沒有運行。數據庫在容器啓動時啓動,之後可以執行任何sql文件。最簡單的辦法是把你的SQL文件到特殊的目錄:

FROM postgres:9.4 
COPY *.sql /docker-entrypoint-initdb.d/ 

當系統啓動時啓動腳本會從這個目錄執行所有文件。你可以在文檔https://hub.docker.com/_/postgres/中閱讀關於這個如何擴展這個圖片。另外,如果你需要不同的用戶,你應該設置環境變量POSTGRES_USERPOSTGRES_PASSWORD。使用自定義腳本創建用戶比較容易。

+0

根據最新的建議,我們應該在'ADD'上使用'COPY'。 –

+0

是的,修正了這個:) – jazgot

1

正如上面的評論所說,在圖像構建過程中,您不會得到Postgres的運行實例。

你可以採取稍微不同的方法。您可以將它們複製到/docker-entrypoint-initdb.d/目錄,而不是嘗試自己執行SQL腳本。當容器啓動時它們將被執行。

看一看如何Postgres的:9.4的圖像是構建:

而且在Dockerfile使用變量設置數據庫細節:

  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_PASSWORD