I am facing the neo4j connection issue while trying the run the neo4j code; the same working fine outside docker but failing to establish the connection with neo4j database while running inside docker.
Error message:
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)
The code I used is as follows:
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()
My bolt port is 11010 as in code. Am I missing anything here? I tried the below things but no luck
1) used 127.0.0.1 instead of localhost
2) closed the sessions
And my docker file is as follows:
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"]
From the comment, I assume the neo4j Database is running in other containers.
You can not connect from one container to another container using URL localhost.
Localhost always refers to the localhost of the current container not the other container call it B.
So possible alternate and solution
neo4j:port thats it.linking docker run -d -P --name web --link newdb:db training/webapp python app.py
Now you refer it from inside python container like db as a host.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With