2014-10-05 54 views
5

我正在嘗試使用docker創建簡單的postgres服務器。我使用官方postgres image作爲我的容器的基礎。 我Dockerfile包含以下命令:Docker上的Postgres。我如何創建一個數據庫和一個用戶?

FROM postgres 
USER postgres 
RUN /etc/init.d/postgresql start &&\ 
    psql --command "CREATE USER user WITH SUPERUSER PASSWORD 'user';" &&\ 
    createdb -O user app 

當我嘗試運行它,我有一個錯誤:

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"?

我做錯了嗎?

+2

您是否檢查過「*服務器是否在本地運行並接受Unix域套接字*上的連接」? – 2014-10-05 09:47:44

回答

2

postgres開始接受連接可能需要一些時間。您編寫它的方式將在啓動函數返回後立即調用CREATE USER。試着在那裏睡覺,看看它是否仍然是一個問題。

1

在入口點腳本里面有同樣的問題。以下是我摘錄Dockerfile

# init execution 
ENTRYPOINT ["/usr/local/sbin/initpostgres.sh"] 

用以下命令intipostgres.sh腳本

su postgres -c "pg_ctl start -l /var/lib/postgresql/logpostgres" 
su postgres -c "createuser -s $OPENERPUSER" 

每@seanmcl的CREATEUSER命令前加sleep 1內建議修正爲我工作:

su postgres -c "pg_ctl start -l /var/lib/postgresql/logpostgres" 
sleep 1 
su postgres -c "createuser -s $OPENERPUSER" 
1

使用pg_ctl使用-w標誌,這樣命令將在服務器啓動時結束。不再懷疑我們是否等了很久。我們其實可以停止服務器以同樣的方式

sudo -u postgres pg_ctl start -w -D ${PGDATA} 

sudo -u postgres psql --command "CREATE USER user WITH SUPERUSER PASSWORD 'user';" &&\ 
sudo -u postgres createdb -O user app 

sudo -u postgres pg_ctl stop -w 
1

這個問題似乎是與Postgres的Unix套接字是不是你的主機上。您可以通過運行以下命令來解決此問題。

docker run -p 5432:5432 --volume="/run/postgresql:/run/postgresql" -d --name postgres postgres

的必不可少的部件是--volume標誌。它將包含unix套接字文件.s.PGSQL.5432的文件夾鏈接到主機以供其他進程讀取。

這似乎是一個重複的問題Installing PostgreSQL within a docker container,是對的OP?

相關問題