postgresql 认证的SpiceDB:无法创建Postgres数据存储区,无法连接

j7dteeu8  于 2022-12-26  发布在  PostgreSQL
关注(0)|答案(2)|浏览(187)

我已经创建了一个在端口5432上本地运行的Postgres数据库。该数据库位于Docker容器中。当我尝试将此数据库与SpiceDB(另一个Docker容器)连接时,我收到错误消息。

"error":"failed to create datastore: unable to instantiate datastore: 
failed to connect to `host=localhost user=postgres database=spicedb`: 
dial error (dial tcp [::1]:5432: connect: cannot assign requested address)",
"time":"2022-05-18T07:48:10Z","message":
"terminated with errors"

数据库名为“spicedb”,没有任何表。有什么想法如何正确地连接SpiceDB与Postgres?
x一个一个一个一个x一个一个二个x

yks3o0rb

yks3o0rb1#

如果它们在两个不同的容器中,你将不能使用localhost作为主机名,你应该使用一个用户定义的桥网络,并通过容器名来寻址postgres示例。
Docker的文档如下:https://docs.docker.com/network/bridge/
创建网桥网络:

docker network create spicedb-net

在网络上使用容器名称运行postgres:

docker run --name spicedb-datastore \
  --network spicedb-net
  -e POSTGRES_PASSWORD=<db-password> \
  -d postgres

运行SpiceDB并使用容器名作为postgres的主机名。

docker run --name spicedb -p 50051:50051 \
  --network spicedb-net
  --rm authzed/spicedb serve 
  --grpc-preshared-key "<my-key>" \
  --datastore-engine=postgres \
  --datastore-conn-uri="postgres://postgres:<db-password>@spicedb-datastore:5432/spicedb?sslmode=disable"
gojuced7

gojuced72#

不要忘记在最后一个命令之前启动SpiceDB也运行migrate命令,我真的很难猜测docker,因为它在文档中丢失(幸运的是,我设法通过启发形式OpenFGA命令做到这一点):

docker run --rm authzed/spicedb migrate head --datastore-engine=postgres --datastore-conn-uri="postgres://postgres:<db-password>@spicedb-datastore:5432/spicedb?sslmode=disable"

PS:同样在Windows Docker上,--datastore-conn-uri连接字符串可能无法与“或”一起使用,但可以直接将其放在没有任何撇号的位置。
PS PS:我仍然有一个问题,如果我关闭windows cmd在其中我启动了docker,容器被删除从docker容器列表,而不是刚刚被停止。因此,我不能再次从windows docker启动它,我只能每次启动一个新的,并保持CMD打开,如果我想使用docker。可能是一些问题与windows docker的docker图像。

相关问题