簡體   English   中英

Postgres在Docker上。 如何創建數據庫和用戶?

[英]Postgres on Docker. How can I create a database and a user?

我正在嘗試使用docker創建簡單的postgres服務器。 我使用官方的postgres圖像作為我的容器的基礎。 我的Dockerfile包含以下命令:

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

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

psql:無法連接到服務器:沒有這樣的文件或目錄服務器是否在本地運行並接受Unix域套接字“/var/run/postgresql/.s.PGSQL.5432”上的連接?

我做錯了什么?

postgres可能需要一些時間才能開始接受連接。 你編寫它的方式,它將在start函數返回后立即調用CREATE USER。 試着在那里睡一覺,看看它是否還有問題。

將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

在入口點的腳本中有相同的問題。 以下是我的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"

問題似乎是postgres unix socket不在你的主機上。 您可以通過運行以下命令來解決此問題。

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

最重要的部分是--volume flag。 它將包含unix套接字文件.s.PGSQL.5432的文件夾鏈接到主機,以便其他進程讀取。

這似乎是一個在Docker容器安裝PostgreSQL的重復問題,是對的OP嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM