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"?
我做错了吗?
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?
您是否检查过“*服务器是否在本地运行并接受Unix域套接字*上的连接”? – 2014-10-05 09:47:44