【发布时间】:2021-04-20 12:23:55
【问题描述】:
我有一个在我机器上的 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 容器并使用其容器名称连接到该容器来使用环境变量创建了数据库。
现在我正在尝试将我的 express 应用程序连接到数据库。我正在使用一个名为 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 容器,但我们将不胜感激。
【问题讨论】:
-
您的 express 应用可以在同一台机器上运行而不使用 docker?你试过写'localhost'而不是'172.17.0.2'吗?它应该与“localhost”参数一起使用,因为您已将 5432 端口从容器转发到主机上的 5432 端口
-
由于
localhost表示主机,而不是容器,我建议在host部分中使用container_name而不是IP 地址。 -
我将在帖子中添加一个编辑以澄清,我尝试不指定主机,使用 localhost 和 container_name,以及网桥的 ip 和 docker 容器的 ip。我很茫然。
标签: postgresql docker mikro-orm