【问题标题】:Docker postgres starting automation can not create database due to error由于错误,Docker postgres 启动自动化无法创建数据库
【发布时间】:2018-08-10 06:42:47
【问题描述】:

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

我想在 docker 中使用 docker postgres 官方包用于 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;";

它不会给我错误!它有效!
为什么会发生这种行为?

【问题讨论】:

    标签: database bash postgresql docker containers


    【解决方案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;";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多