使用Docker启动Web应用程序,无法连接到Postgresql DB?

罗马领袖

尝试使用Tomcat的PersistentManager将会话数据写入运行在本地计算机上的Postgres DB时,出现以下错误:

SEVERE: A SQL exception occurred org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

该应用程序本身在docker容器中运行。为了完整起见,我当前的context.xml文件是:

<?xml version='1.0' encoding='utf-8'?>
<Context>
<Manager className="org.apache.catalina.session.PersistentManager"
    distributable="true"  processExpiresFrequency="6" maxIdleBackup="0" debug="99" >
    <Store className="org.apache.catalina.session.JDBCStore"
        driverName="org.postgresql.Driver"
        connectionURL="jdbc:postgresql://localhost/admin?stringtype=unspecified"
        connectionName="admin" connectionPassword="admin"
        sessionAppCol="app_name" sessionDataCol="session_data" sessionIdCol="session_id"
        sessionLastAccessedCol="last_access" sessionMaxInactiveCol="max_inactive"
        sessionTable="tomcat_sessions_tb" sessionValidCol="valid_session" />
</Manager>
</Context>

根据这里的建议:Postgresql:连接被拒绝。检查主机名和端口是否正确以及邮局主管正在接受TCP / IP连接

我通过确认了netstat -aln | grep LISTENPostgresql正在运行并且正在正确的端口上侦听:

tcp4       0      0  127.0.0.1.5432         *.*                    LISTEN     
tcp6       0      0  ::1.5432                                      *.*                                           LISTEN     

并且我的postgresql.conf(位于中usr/local/var/postgres)具有listen_addresses = localhost和port = 5432,它镜像了我在Pgadmin3中正在运行的服务器的主机和端口。

我怀疑问题在于Docker在VM中运行,因此我获得的本地信息可能不是全部。在网上阅读可用信息时,似乎我可能需要某种桥接网络。
但是,我承认我是该领域的新手,因此不确定如何设置。

小Q

为什么我无法连接到localhost:5432?

猫你的容器的 /etc/hosts

$ sudo docker exec -it [container] cat /etc/hosts

对于docker网络bridge,默认情况下,localhost内部指向容器本身(Docker默认网桥网络)。然后,您无需5432在容器中进行监听:

$ sudo docker exec [container] nc -v -z localhost 5432


解决方案1.如果要在配置xml中对“ localhost:5432”进行硬编码,最简单的方法是使用选项“ --net = host”创建容器:

$ sudo docker run --net=host -it ...

解决方案2. localhost 在容器内更改 您的Docker主机IP

  • 获取您的Docker主机IP
    $ sudo docker inspect -f '{{ .NetworkSettings.Gateway }}' 
    192.168.5.1
  • 输入您的容器:
    $ sudo docker exec -it [container] /bin/bash
  • 编辑文件/etc/hosts以将localhost指向docker host ip
    $ sudo vim /etc/hosts
    192.168.5.1 localhost

解决方案3.修改数据库配置文件以使用别名代替localhost

connectionURL="jdbc:postgresql://DB_ALIAS/admin?stringtype=unspecified"
然后将添加 DB_ALIAS 到容器的主机:
$ sudo docker run --add-host DB_ALIAS:192.168.5.1 -it [image] ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

Springboot应用程序无法在DB重启

来自分类Java

如何使用JDBC将Java应用程序连接到db4free.net?

来自分类Dev

连接到现有的Heroku Postgres DB for Sinatra应用程序

来自分类Dev

无法通过Linux上的节点连接到Postgresql DB

来自分类Dev

Azure Web应用程序无法访问Azure DB

来自分类Dev

将Azure Web应用程序连接到Azure Cosmos db

来自分类Dev

无法通过VBA连接到PostgreSQL DB

来自分类Dev

无法使用Postgres DB启动Grails 3.3.8应用程序

来自分类Dev

无法使用DBeaver连接到本地Postgresql DB

来自分类Dev

如何使用相同的DATABASE_HOST将django应用程序连接到dockerized django和非dockerized django的dockerized postgres db

来自分类Dev

如何将Flask应用程序连接到在Docker中运行的SQLite DB?

来自分类Dev

无法通过流星应用程序连接远程Mongo DB

来自分类Dev

无法连接到Mongo DB

来自分类Dev

使用JDBC驱动程序在Android应用程序与Oracle DB之间建立连接

来自分类Dev

无法连接到DB CodeIgniter

来自分类Dev

从BlueMix上的PHP应用程序连接到多个DB2实例

来自分类Dev

在CICS上的WAS Liberty上在应用程序启动时将Hibernate连接到DB2

来自分类Dev

我的Node.js本地应用程序无法连接到Azure SQL DB

来自分类Dev

Docker - Maria DB 无法启动

来自分类Dev

如何将 django 中的两个应用程序连接到一个 db postgresql

来自分类Dev

在flask应用程序启动之前,Docker compose让mysql db完全启动

来自分类Dev

Python 应用程序无法连接到 PostgreSQL Docker

来自分类Dev

如何在我的 Java 应用程序中连接到 mongo db?

来自分类Dev

无法从 Node.js 应用程序连接到 MySQL DB

来自分类Dev

无法将 postgresql db 连接到我的 netcore Web 项目(DigitalOcean Cloud)

来自分类Dev

使用 Cloud SQL PostgreSQL DB 的 Cloud Run 上的 Django 应用程序出错 - 无法连接到数据库

来自分类Dev

是否需要关闭 Web 应用程序的 Mongo DB 连接

来自分类Dev

如何从 dockerized spring boot 应用程序连接 docker db?

来自分类Dev

从 Azure 函数应用程序连接到 SQL DB 时找不到 SqlException 服务器错误

Related 相关文章

  1. 1

    Springboot应用程序无法在DB重启

  2. 2

    如何使用JDBC将Java应用程序连接到db4free.net?

  3. 3

    连接到现有的Heroku Postgres DB for Sinatra应用程序

  4. 4

    无法通过Linux上的节点连接到Postgresql DB

  5. 5

    Azure Web应用程序无法访问Azure DB

  6. 6

    将Azure Web应用程序连接到Azure Cosmos db

  7. 7

    无法通过VBA连接到PostgreSQL DB

  8. 8

    无法使用Postgres DB启动Grails 3.3.8应用程序

  9. 9

    无法使用DBeaver连接到本地Postgresql DB

  10. 10

    如何使用相同的DATABASE_HOST将django应用程序连接到dockerized django和非dockerized django的dockerized postgres db

  11. 11

    如何将Flask应用程序连接到在Docker中运行的SQLite DB?

  12. 12

    无法通过流星应用程序连接远程Mongo DB

  13. 13

    无法连接到Mongo DB

  14. 14

    使用JDBC驱动程序在Android应用程序与Oracle DB之间建立连接

  15. 15

    无法连接到DB CodeIgniter

  16. 16

    从BlueMix上的PHP应用程序连接到多个DB2实例

  17. 17

    在CICS上的WAS Liberty上在应用程序启动时将Hibernate连接到DB2

  18. 18

    我的Node.js本地应用程序无法连接到Azure SQL DB

  19. 19

    Docker - Maria DB 无法启动

  20. 20

    如何将 django 中的两个应用程序连接到一个 db postgresql

  21. 21

    在flask应用程序启动之前,Docker compose让mysql db完全启动

  22. 22

    Python 应用程序无法连接到 PostgreSQL Docker

  23. 23

    如何在我的 Java 应用程序中连接到 mongo db?

  24. 24

    无法从 Node.js 应用程序连接到 MySQL DB

  25. 25

    无法将 postgresql db 连接到我的 netcore Web 项目(DigitalOcean Cloud)

  26. 26

    使用 Cloud SQL PostgreSQL DB 的 Cloud Run 上的 Django 应用程序出错 - 无法连接到数据库

  27. 27

    是否需要关闭 Web 应用程序的 Mongo DB 连接

  28. 28

    如何从 dockerized spring boot 应用程序连接 docker db?

  29. 29

    从 Azure 函数应用程序连接到 SQL DB 时找不到 SqlException 服务器错误

热门标签

归档