如何解决连接不可用:尝试从 docker 应用程序连接本地托管的 Neo4j
我有一个 neo4j 数据库 https://localhost:7474
(https://localhost:7474),我通过 py2neo 的图形对象(“bolt://127.0.0.1:7687
”)连接它。如果不在 Docker 环境中,则一切正常。现在我想做的是连接到我的应用程序(使用 fastpi 构建:https://fastapi.tianGolo.com/deployment/docker/
)。
我的问题是如何通过 docker 中托管的 docker 镜像(fastapi)镜像连接到本地托管(在我的 mac 中)neo4j db。
但是我收到以下错误:
docker run e7bf302e02ec
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",line 742,in acquire
cx = self._free_list.popleft()
IndexError: pop from an empty deque
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/py2neo/wiring.py",line 162,in open
s.connect(address)
ConnectionRefusedError: [Errno 111] Connection refused
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/py2neo/client/bolt.py",line 212,in open
wire = cls._connect(profile,on_broken=on_broken)
File "/usr/local/lib/python3.8/site-packages/py2neo/client/bolt.py",line 228,in _connect
wire = Wire.open(profile.address,keep_alive=True,on_broken=on_broken)
File "/usr/local/lib/python3.8/site-packages/py2neo/wiring.py",line 164,in open
raise_from(WireError("Cannot connect to %r" % (address,)),error)
File "<string>",line 3,in raise_from
py2neo.wiring.WireError: Cannot connect to IPv4Address(('127.0.0.1',7687))
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/bin/uvicorn",line 8,in <module>
sys.exit(main())
File "/usr/local/lib/python3.8/site-packages/click/core.py",line 829,in __call__
return self.main(*args,**kwargs)
File "/usr/local/lib/python3.8/site-packages/click/core.py",line 782,in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.8/site-packages/click/core.py",line 1066,in invoke
return ctx.invoke(self.callback,**ctx.params)
File "/usr/local/lib/python3.8/site-packages/click/core.py",line 610,in invoke
return callback(*args,**kwargs)
File "/usr/local/lib/python3.8/site-packages/uvicorn/main.py",line 362,in main
run(**kwargs)
File "/usr/local/lib/python3.8/site-packages/uvicorn/main.py",line 386,in run
server.run()
File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py",line 49,in run
loop.run_until_complete(self.serve(sockets=sockets))
File "/usr/local/lib/python3.8/asyncio/base_events.py",line 616,in run_until_complete
return future.result()
File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py",line 56,in serve
config.load()
File "/usr/local/lib/python3.8/site-packages/uvicorn/config.py",line 308,in load
self.loaded_app = import_from_string(self.app)
File "/usr/local/lib/python3.8/site-packages/uvicorn/importer.py",line 20,in import_from_string
module = importlib.import_module(module_str)
File "/usr/local/lib/python3.8/importlib/__init__.py",line 127,in import_module
return _bootstrap._gcd_import(name[level:],package,level)
File "<frozen importlib._bootstrap>",line 1014,in _gcd_import
File "<frozen importlib._bootstrap>",line 991,in _find_and_load
File "<frozen importlib._bootstrap>",line 975,in _find_and_load_unlocked
File "<frozen importlib._bootstrap>",line 671,in _load_unlocked
File "<frozen importlib._bootstrap_external>",line 783,in exec_module
File "<frozen importlib._bootstrap>",line 219,in _call_with_frames_removed
File "./app/main.py",in <module>
from .database import Base
File "./app/database.py",line 28,in <module>
Base = Graph(DATABASE_URL,auth=(DATABASE_USERNAME,DATABASE_PASSWORD))
File "/usr/local/lib/python3.8/site-packages/py2neo/database/__init__.py",line 358,in __init__
self.service = GraphService(profile,**settings)
File "/usr/local/lib/python3.8/site-packages/py2neo/database/__init__.py",line 189,in __init__
self._connector = Connector(profile,**connector_settings)
File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",line 893,in __init__
self.add_pools(self._profile)
File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",line 913,in add_pools
pool = ConnectionPool.open(
File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",line 570,in open
seeds = [pool.acquire() for _ in range(init_size or cls.default_init_size)]
File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",in <listcomp>
seeds = [pool.acquire() for _ in range(init_size or cls.default_init_size)]
File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",line 749,in acquire
cx = self.connect()
File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",line 706,in connect
cx = Connection.open(self.profile,user_agent=self.user_agent,File "/usr/local/lib/python3.8/site-packages/py2neo/client/__init__.py",line 141,in open
return Bolt.open(profile,user_agent=user_agent,File "/usr/local/lib/python3.8/site-packages/py2neo/client/bolt.py",line 223,in open
raise_from(ConnectionUnavailable("Cannot open connection to %r" % profile),in raise_from
py2neo.client.ConnectionUnavailable: Cannot open connection to ConnectionProfile('bolt://neo4j@127.0.0.1:7687')
解决方法
这似乎是 docker
及其构建方式的问题。
基本上,如果您尝试从容器访问 localhost
,您将访问容器的本地主机,而不是您的计算机!
这个想法是获取您网络的 docker 容器的 IP 地址并使用该地址。
以下是一些链接,根据您所在的平台显示如何操作(我也在考虑其他用户可能会找到此答案并依赖它)
localhost refuses connection with docker
How to access "http://localhost" from a Docker container in Windows?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。