[英]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.