如何从本地机器的docker网络外部连接到dockerized数据库



我已经为我的windows机器上的postgres数据库创建了这个docker容器:

docker run -d -p 5432:5432 --rm --name pg_container -v C:pgdata:/var/lib/postgresql/data --env-file ./database.env postgres:latest

如果我运行docker exec -it pg_container bash并运行psql命令,我可以创建一个数据库名称mydb(在实际情况下,这是由flask应用程序创建的)。

如果我运行

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' tma_pg_db_container

我将得到172.0.0.2

现在我想从容器外部直接连接到数据库。

psql postgresql://postgres:<PASSWORD>@<IP_ADDRESS>:5432/tma_pg_db

IP_ADDRESS应该用什么?

请注意,我在系统级上创建了另一个psotgres数据库,而不是在容器中。对于那个,我使用localhost它,并且工作得很好,它连接。如果我使用localhost,它连接到系统级数据库,而不是docker容器中的容器。

您应该使用localhost。它将连接到使用docker run -p选项发布的端口。

(如果你使用的是基于虚拟机的解决方案,如Docker Machine或Docker Toolbox,你需要它的IP地址;docker-machine ip会告诉你它是什么。如果你从一个不同的主机调用,使用物理主机的IP地址,如果服务不在容器中运行,你也会这样做。

这两个重要的推论是:(a)你不需要像docker exec这样的调试工具来与你的数据库交互;(b)您不需要查找docker inspectIP地址(在许多常见上下文中也不起作用)。

相关内容

  • 没有找到相关文章

最新更新