如何从(未解耦的)Python应用程序连接到dockerized PostgreSQL

我按照这里的说明通过Docker安装PostgreSQL。 其实我用了以下两个命令:

Run docker run --name postgresql -d sameersbn/postgresql:9.4-2 Login sudo docker exec -it postgresql sudo -u postgres psql 

然后我做\conninfo和我得到:

 # You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432" 

接下来我想做什么(但是不知道怎么做)就是连接到这个数据库,这个数据库被认为是一个在我的本地机器上运行的外部Python应用程序(而不是另一个文档)。

我应该射击localhost:5432还是有什么缺失?

您需要导出 postgresql 的端口 ,然后可以像连接本地一样连接到它。

 docker run --name postgresql -d -p 5432:5432 sameersbn/postgresql:9.4-2 

如果你不明白上面的链接,我build议你通读入门指南 。

正如@Burhan Khalid所说的,你可以使用以下方式暴露你的容器端口:

 docker run --name postgresql -d -p 5432:5432 sameersbn/postgresql:9.4-2 

要连接到PostgreSQL容器,可以直接连接到: 127.0.0.1:5432 : 127.0.0.1:5432 。 你不能使用localhost:5432 ,因为它会尝试在你的主机上find一个套接字文件(套接字文件在容器中)。

另一个解决scheme是使用你的容器IP地址。 要查找容器IP地址,您可以使用:

 docker inspect --format '{{ .NetworkSettings.IPAddress }}' <your-container-id> 

但是,如果你重新启动你的容器,容器将得到一个新的IP。 所以,你需要重新configuration你的数据库configuration。