我已经为我的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地址,如果服务不在容器中运行,你也会这样做。
docker exec
这样的调试工具来与你的数据库交互;(b)您不需要查找docker inspect
IP地址(在许多常见上下文中也不起作用)。