我运行python容器,我想连接localhost postegresql。我尝试了一些方法。但不行。请跟我说我能怎么做 ?谢谢。
我在端口5432上运行了postegresql,创建了datatbase并授予用户。
运行docker comand
docker run --name=python3 -v ${pwd}:/code -w /code python
python代码
import psycopg2
def main():
#Define our connection string
conn_string = "host='localhost' dbname='testDB' user='test' password='test'"
# print the connection string we will use to connect
print ("Connecting to database\n ->{}".format(conn_string))
# get a connection, if a connect cannot be made an exception will be raised here
conn = psycopg2.connect(conn_string)
# conn.cursor will return a cursor object, you can use this cursor to perform queries
cursor = conn.cursor()
print ("Connected!\n")
if __name__ == "__main__":
main()
错误消息
服务器是否在主机上运行" localhost" (:1)并接受 端口5432上的TCP / IP连接? 无法连接到服务器:连接被拒绝 服务器是否在主机上运行" localhost" (127.0.0.1)并接受 端口5432上的TCP / IP连接?
答案 0 :(得分:0)
这取决于您的主机操作系统和Docker版本 我假设你的数据库不是在容器本身运行,而是在主机本身(localhost)上运行。
例如,正如" From inside of a Docker container, how do I connect to the localhost of the machine?"中提到的,使用Docker for Mac v 17.06及更高版本(2017年6月),您可以连接到特殊的Mac-DNS DNS名称{{1这将解析为主机使用的内部IP地址。
在Linux上直接使用主机模式,其中安装了docker.for.mac.localhost
的图像:
ifconfig
答案 1 :(得分:0)
读到你在Windows 10上并在主机上运行postgresql,我建议你在容器中运行postgresql。它使这更容易。
要将python容器连接到postgres容器,您需要一个docker网络。我们称之为postgres_backend。
docker network create postgres_backend
您可以使用以下命令创建postgresql容器。只需将/ path / to / store / data更改为您要存储postgres数据的本地目录:
docker run --name postgres \
-e POSTGRES_PASSWORD=test \
-e POSTGRES_USER=test \
-d --restart always \
-v /path/to/store/data:/var/lib/postgresql/data \
--net postgres_backend \
postgres:9.6
现在你的postresql容器应该启动并运行:)
要将python容器连接到它,您必须在docker run命令中添加--net postgres_backend
并将脚本中的主机更改为“postgres”(这是我们给postgres容器的名称{ {1}})。
如果python容器找不到主机“postgres”,请在输入命令--name
时使用显示的IP进行尝试。
答案 2 :(得分:0)
要修复此错误:
首先,它不起作用是正常的,因为postgresql不在与应用程序相同的容器中运行,因此主机localhost:5432不存在。 要解决这个问题 : 在属性文件nottead localhost:5432上,使用IPadresse(如IP:5432),然后在pg_hba.conf中添加此文件 托管所有0.0.0.0/0 md5