docker 容器内的 Solr 运行 未连接到 PostgreSQL 数据库
Solr running inside docker container is not connecting to PostgreSQL database
我在 docker 容器中有 PostgreSQL 和 Solr,运行 在同一台机器上。我正在尝试将数据从 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.
基本上正在建立连接 refused/never,但我很困惑。
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 或 Public IP - 这是容器内 solr 运行 的端口。
要从容器内部进行连接,我会通过环境变量将 IP 和端口传递到容器中,例如:
docker run -it -p '<OUTSIDE_PORT>:<INSIDE_PORT>' -e POSTGRESQL_ADDR=<IP>:<PORT> <IMAGE_NAME>
然后就可以使用ENV['POSTGRESQL_ADDR']在容器外连接了。很可能会使用您的私人 IP 地址。
我在 docker 容器中有 PostgreSQL 和 Solr,运行 在同一台机器上。我正在尝试将数据从 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.
基本上正在建立连接 refused/never,但我很困惑。
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 或 Public IP - 这是容器内 solr 运行 的端口。
要从容器内部进行连接,我会通过环境变量将 IP 和端口传递到容器中,例如:
docker run -it -p '<OUTSIDE_PORT>:<INSIDE_PORT>' -e POSTGRESQL_ADDR=<IP>:<PORT> <IMAGE_NAME>
然后就可以使用ENV['POSTGRESQL_ADDR']在容器外连接了。很可能会使用您的私人 IP 地址。