0

У меня есть PostgreSQL и Solr в контейнере докера, работающем на той же машине. Я пытаюсь сделать dataimport из Postgres в Solr, но я получаю ошибки. Вот соответствующие части журнала:Solr, работающий внутри контейнера докеров, не подключается к базе данных PostgreSQL

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.

Я не знаю, куда еще идти отсюда.

+1

Вы используете postgresql и solr в одном контейнере? если нет, вы не можете использовать localhost для подключения от одного к другому. – Michael

+0

@ Майкл, это верно. Solr находится в контейнере, и Postgres только что установлен на самой машине. Если я не могу использовать localhost, что я могу использовать? – m0meni

ответ

2

В принципе, вам нужно открыть порт на контейнере, что-то вроде:

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

Затем на локальном хосте вы можете подключиться к частному IP или Public IP в поле Параметр - это порт, который solr запускается внутри контейнера.

Для подключения внутри контейнера, я бы передать IP-адрес и порт через переменную окружения в контейнер, так что-то вроде:

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

Затем вы можете использовать ENV [ «POSTGRESQL_ADDR»] для подключения снаружи контейнера. Скорее всего, ваш частный IP-адрес будет использоваться.