在docker容器内运行的Solr没有连接到PostgreSQL数据库



我有PostgreSQL和Solr,在一个docker容器,运行在同一台机器上。我试图做一个数据从Postgres到Solr,但我得到错误。以下是日志的相关部分:

Full Import failed:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: SELECT * FROM formulas
org.postgresql.util.PSQLException: Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

基本上连接被拒绝/从未建立,但我很困惑。

netstat -nltp
收益率

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      772/sshd
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1822/postgres
tcp6       0      0 :::22                   :::*                    LISTEN      772/sshd
tcp6       0      0 :::8983                 :::*                    LISTEN      28508/docker-proxy
tcp6       0      0 ::1:5432                :::*                    LISTEN      1822/postgres

表示Postgres正在监听127.0.0.1。此外,在pg_hba.conf中,我有

local   all             postgres                                peer
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 md5

我认为这是允许连接的正确设置。

我的solrconfig.xml负责数据导入设置,如下所示:
<dataConfig>
  <dataSource driver="org.postgresql.Driver"
          url="jdbc:postgresql://127.0.0.1:5432/formulagrid"
          user="myuser"
          password="mypassword"/>
  <document>
    <entity name="formula" query="SELECT * FROM formulas">
      <field column="formula_id" name="id" />
      <field column="name" name="name" />
      <field column="formula" name="formula" />
    </entity>
  </document>
</dataConfig>

我也试过地址jdbc:postgresql://localhost:5432/formulagrid

我不知道从这里还能做什么

基本上,您需要在容器上打开一个端口,如:

docker run -it -p '<OUTSIDE_PORT>:<INSIDE_PORT>' <IMAGE_NAME>

然后在本地主机上,你可以连接到盒子的私有IP或公共IP到-这是solr在容器内运行的端口。

要从容器内部连接到外部,我将通过环境变量将IP和端口传递到容器中,因此类似于:

docker run -it -p '<OUTSIDE_PORT>:<INSIDE_PORT>' -e POSTGRESQL_ADDR=<IP>:<PORT> <IMAGE_NAME>

然后你可以使用ENV['POSTGRESQL_ADDR']连接到容器外部。最有可能的是,您的私有ip地址将被使用。

相关内容

  • 没有找到相关文章

最新更新