将瓶子应用程序连接到在docker容器中运行的postgresql服务
我有一个使用PostgreSQL作为后端数据库的Flask应用程序。 我已经安装了Postgresql作为dockerized服务(使用docker-compose)。
我现在在我的机器上成功运行postgresql。 我input了所有相关的详细信息以连接到数据库(用户,pwd,dbname,服务器地址,服务器端口),但无法连接。
当我尝试连接到数据库时,在Flask(来自psycopg2)中抛出一个exception:
conn = _connect(dsn, connection_factory=connection_factory, **kwasync) OperationalError: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
当我检查postgresql是否正在运行时,我收到以下消息:
$ service postgresql status ● postgresql.service Loaded: not-found (Reason: No such file or directory) Active: inactive (dead)
在阅读了关于Docker和PostgreSQL的更多信息后,我开始理解为什么我不能连接 – 因为postgresql运行在自己的容器中 – 所以我在db连接参数中使用的服务器地址和端口细节是错误的。
这里是docker-ps
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b7c8cbac0a3b mbsolutions/tryton-server-gnuhealth:3.8 "/docker-entrypoint.s" 13 days ago Up 12 days 0.0.0.0:8000->8000/tcp gnuhealth_tryton_1 0a4d9fd42544 mbsolutions/postgres-gnuhealth:3.0 "/docker-entrypoint.s" 13 days ago Up 12 days 5432/tcp gnuhealth_db_1
我的问题是这样的:
我应该在我的数据库连接参数中使用哪些参数(特别是数据库服务器地址和端口),以便我可以从我的烧瓶应用程序连接到dockerized postgresql服务?
注:我已经看到了这个似乎相似的其他问题 ,但给出的解决scheme并不直接回答我的问题。
========================正确答案开始======================= =
您必须映射postgres容器端口(5432)才能在主机上访问它。
将其添加到docker-compose.yml中
ports: - "5432:5432"
======================== Correct Answer End ======================= =
旧的答案为后人保留:
你可能想要使用host
networking。
将其添加到docker-compose.yml中
network_mode: "host"
容器不会与主机本身隔离。
- 无法从位于同一局域网中的另一主机ping通泊坞窗容器
- Supervisord不会显示来自进程的stdout
- 运行Bottle(后端)+ Google App Engine上的Nodejs(前端)
- 哪里可以看到谷歌App Engine上pipe理Vms上的失败部署日志?
- 使用RestSharp获取“使用Shipyard API时,阻止操作被调用WSACancelBlockingCall”中断
- Google App Engine灵活设置中的应用内存不足
- 在Docker镜像中部署WAR文件的正确方法
- angular2应用程序在nginx:稳定的高山docker图像尝试获取sockjs的URL,当我绑定主机8080 – >容器80,但不是80-> 80
- 使用docker在supervisord中loggingstdout