-1

我有一个在我机器上的 docker 容器中运行的 postgresql 数据库。我用这个运行命令开始它。

docker run -p 5432:5432 -d \
-e POSTGRES_PASSWORD=$PG_PASS \
-e POSTGRES_USER=$PG_USER \
-e POSTGRES_DB=$PG_NAME \
-v pgdata:/var/lib/postgresql/data \
--name $PG_CONTAINER_NAME \
postgres:alpine

我已经确认这通过运行 pgadmin4 容器并使用其容器名称连接到该容器来使用环境变量创建了数据库。

现在我正在尝试将我的快速应用程序连接到数据库。我正在使用一个名为 mikroorm 的 orm。ts代码是

const orm = await MikroORM.init({
    dbName: 'ketopal',
    user: 'ketopaladmin',
    password: 'ketopaladmin',
    type: 'postgresql',
    debug: !__prod__,
    entities: [Post],
    host: '172.17.0.2',
    port: 5432
})

这会产生一行错误,

MikroORM 无法连接到 postgresql://ketopaladmin:*****@172.17.0.2:5432 上的数据库 ketopal

但我不知道为什么或如何解决它。172.17.0.2 是 docker 给容器的 IP。

在我的完美世界中,你们都可以告诉我如何让 docker 使 localhost:5432 指向 docker 容器,但我们将不胜感激。

4

1 回答 1

0

以为我会在这里记录以防有人也遇到这种情况。我在端口 5432 上运行了一个本地 postgres 进程,因此当我尝试将容器“发布”到同一个端口时,它没有这样做,即使它创建了容器并且在其他方​​面工作。我调整了运行命令,将端口 54321 映射到 5432。

docker run -p 54321:5432 -d \
-e POSTGRES_PASSWORD=$PG_PASS \
-e POSTGRES_USER=$PG_USER \
-e POSTGRES_DB=$PG_NAME \
-v pgdata:/var/lib/postgresql/data \
--name $PG_CONTAINER_NAME \
postgres:alpine

TLDR;如果您正在运行的东西已经占用了一个端口,那么在该端口上运行一个容器将不起作用。

于 2021-04-20T04:23:55.207 回答