Docker上的Postgres。我如何创建一个数据库和一个用户?

Docker上的Postgres。我如何创建一个数据库和一个用户?

问题描述:

我正在尝试使用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

postgres开始接受连接可能需要一些时间。您编写它的方式将在启动函数返回后立即调用CREATE USER。试着在那里睡觉,看看它是否仍然是一个问题。

在入口点脚本里面有同样的问题。以下是我摘录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" 

使用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 

这个问题似乎是与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?