Docker Postgres启动自动化由于错误而无法创建数据库

时间:2018-08-10 06:42:48

标签: database bash postgresql docker containers

我想创建一个shell脚本,该脚本可以使用docker自动在postgres数据库中创建,运行和创建数据库。

我想将docker postgres官方软件包用于docker中的postgres。

我使用的脚本如下:

docker network create --subnet=172.18.0.0/16 shared_network;
docker kill postgres_linker;
docker rm postgres_linker;
docker run --name postgres_linker -e POSTGRES_PASSWORD=blahblahblah -d --net shared_network --ip 172.18.0.2 postgres:10-alpine;
docker exec -it postgres_linker psql -U postgres -c "create database linker;";

但是运行此命令时,我得到以下输出,而未创建任何数据库:

Error response from daemon: network with name shared_network already exists
postgres_linker
postgres_linker
b2a9fd4d6e25b62d60adb05c8b6b653a1b55ec7a869c4728677d6289f5cddd63
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"?

此日志的第一行也可以,第二行和第三行也可以,问题是psql不在postgres容器上运行该命令,尽管我尝试运行的命令是正确的。如果我从Shell脚本中单独运行最后一个命令:

docker exec -it postgres_linker psql -U postgres -c "create database linker;";

它不会给我错误!可以了!
为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。
不幸的是,我认为当postgres容器运行时,服务器已启动并立即运行。
这是不正确的,并且需要花费一些时间。所以我需要增加一些延迟。
因此,生成的脚本文件应如下所示:

docker network create --subnet=172.18.0.0/16 shared_network;
docker kill postgres_linker;
docker rm postgres_linker;
docker run --name postgres_linker -e POSTGRES_PASSWORD=blahblahblah -d --net shared_network --ip 172.18.0.2 postgres:10-alpine;
sleep 5;
docker exec -it postgres_linker psql -U postgres -c "create database linker;";