【问题标题】:Neo4j Docker Connection failureNeo4j Docker 连接失败
【发布时间】:2019-09-19 02:55:33
【问题描述】:

我在尝试运行 neo4j 代码时遇到了 neo4j 连接问题;在 docker 外部也可以正常工作,但在 docker 内部运行时无法与 neo4j 数据库建立连接。

错误信息:

    Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/neobolt/direct.py", line 835, in _connect
    s.connect(resolved_address)
OSError: [Errno 99] Cannot assign requested address

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    driver = GraphDatabase.driver(uri, auth=("neo4j", "admin"))
  File "/usr/local/lib/python3.7/site-packages/neo4j/__init__.py", line 116, in driver
    return Driver(uri, **config)
  File "/usr/local/lib/python3.7/site-packages/neo4j/__init__.py", line 157, in __new__
    return subclass(uri, **config)
  File "/usr/local/lib/python3.7/site-packages/neo4j/__init__.py", line 231, in __new__
    pool.release(pool.acquire())
  File "/usr/local/lib/python3.7/site-packages/neobolt/direct.py", line 719, in acquire
    return self.acquire_direct(self.address)
  File "/usr/local/lib/python3.7/site-packages/neobolt/direct.py", line 612, in acquire_direct
    connection = self.connector(address, error_handler=self.connection_error_handler)
  File "/usr/local/lib/python3.7/site-packages/neo4j/__init__.py", line 228, in connector
    return connect(address, **dict(config, **kwargs))
  File "/usr/local/lib/python3.7/site-packages/neobolt/direct.py", line 976, in connect
    raise last_error
  File "/usr/local/lib/python3.7/site-packages/neobolt/direct.py", line 966, in connect
    s = _connect(resolved_address, **config)
  File "/usr/local/lib/python3.7/site-packages/neobolt/direct.py", line 847, in _connect
    raise ServiceUnavailable("Failed to establish connection to {!r} (reason {})".format(resolved_address, error))
neobolt.exceptions.ServiceUnavailable: Failed to establish connection to ('::1', 11010, 0, 0) (reason [Errno 99] Cannot assign requested address)

我使用的代码如下:

from neo4j import GraphDatabase
uri = "bolt://localhost:11010/"
driver = GraphDatabase.driver(uri, auth=("neo4j", "admin"))
with driver.session() as session:
    result = session.run("MATCH (n) RETURN count(n)")
    print(result)
    session.close()

我的螺栓端口是代码中的 11010。我在这里错过了什么吗?我尝试了以下方法,但没有运气
1) 使用 127.0.0.1 而不是 localhost
2) 关闭会话

而我的docker文件如下:

FROM python:3
ADD test.py /
RUN pip install pandas
RUN pip install pymysql
RUN pip install sqlalchemy
RUN pip install neo4j
CMD ["python","test.py"]

【问题讨论】:

  • 你在哪里运行 neo4j 数据库?
  • 本地机器本身以及在本地运行 docker @Adiii
  • 这有帮助吗?

标签: python docker neo4j py2neo neo4j-driver


【解决方案1】:

根据评论,我假设 neo4j 数据库正在其他容器中运行。

您不能使用 URL localhost 从一个容器连接到另一个容器。

Localhost 总是指当前容器的本地主机,而不是其他容器称之为 B。

因此可能的替代方案和解决方案

  • 如果两者都在两个不同的容器中运行,请使用 Docker-compose,您将能够从容器名称访问 new4j 数据库,例如 neo4j:port 就是这样。
  • 如果 new4j 在主机上运行,​​那么您需要使用 python 容器内的 HOST ip 访问 new4j。
  • 如果不想使用docker-compose,可以使用lagacylinking
 docker run -d -P --name web --link newdb:db training/webapp python app.py

现在,您可以从 db 等 python 容器中将其作为主机引用。

【讨论】:

  • 能够使用这样的设置连接MYSQL,但不能连接Neo4j。 Neo4j 在主机上,我正在使用 IP 进行连接。但是失败了。
  • 您必须托管 IP 本地 ip 某些东西 192.*. 它应该可以工作。你也可以从容器中远程登录new4g的端口
  • 不只是本地,我有一个 Neo4j 在另一台服务器上运行。我正在使用该IP。相同的代码在没有 dockerising 的情况下也能正常工作
  • 然后telnet服务器的端口或者连接字符串之类的一切都正确吗?
【解决方案2】:

如果您在容器内运行 python,请使用:

    GraphDatabase.driver(host="<contaniner>", auth=basic_auth("neo4j", "myPass"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多