【问题标题】:Can't connect with BOLT to a docker Neo4j无法通过 BOLT 连接到 docker Neo4j
【发布时间】:2017-01-20 13:52:29
【问题描述】:

我运行一个 Neo4j 的 docker 实例:

docker run -d \
--publish=7474:7474 \
--publish=7687:7687 \
--volume=/home/jeff/tmp/neo4j:/data neo4j

“docker inspect”给出的 IP 是:172.17.0.2。我可以在浏览器中连接到 Neo4j,并更改密码。

然后,在 Docker 中启动一个 bash 实例:

docker run -it ubuntu:16.04 bash
apt-get update
apt-get install python3
apt-get install python3-pip
pip3 install neo4j-driver
apt-get install nano
nano test.py

python 脚本“test.py”是:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

from neo4j.v1 import GraphDatabase, basic_auth

session = GraphDatabase.driver(
    'bolt://172.17.0.2',
    auth=basic_auth('neo4j', '******')
    ).session()

session.run('MATCH (n) RETURN n')

然后:

chmod +x test.py
./test.py

我明白了:

Traceback (most recent call last):
File "./test.py", line 11, in <module>
session.run('MATCH (n) RETURN n')
File "/usr/local/lib/python3.5/dist-packages/neo4j/v1/bolt.py", line 145, in run
self.connection.send()
File "/usr/local/lib/python3.5/dist-packages/neo4j/bolt/connection.py", line 344, in send
raise ServiceUnavailable("Failed to write to closed connection %r" % (self.server.address,))
neo4j.bolt.connection.ServiceUnavailable: Failed to write to closed connection Address(host='172.17.0.2', port=7687)

在容器之外,我的意思是在主机上,test.py 脚本工作正常。有什么想法吗?

-- 编辑--

在容器内,'ip a' 给出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.4/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:4/64 scope link 
       valid_lft forever preferred_lft forever

【问题讨论】:

  • 你能从你的 docker 镜像中给出ifconfig -a 命令的结果吗?
  • 添加到“编辑”部分。我也可以说对 Neo4j 服务器的 ping 有效:(ping 172.17.0.2)

标签: python docker neo4j


【解决方案1】:

容器“172.17.0.4”中的 IP 与您在脚本中指定的 IP“172.17.0.2”不匹配。我怀疑 Python 试图绑定到后者,但失败了,并返回了一个关闭的套接字。然后当 Neo4j 去发送时,它在一个关闭的套接字上出错。在this page上搜索“写入失败”。

尝试将脚本设置为使用其中之一作为地址:

  • "172.17.0.4" - 根据 'ip a' 的结果绑定到接口
  • "0.0.0.0" - 绑定到所有可用的接口。

【讨论】:

  • 这是由于不同的测试。 IP 相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多