如何解决从另一个 Docker 容器连接到 Neo4 驱动程序在 Docker 容器中
通常我会在 Docker 中运行一个 Neo4j 实例,然后在脚本中我像这样访问驱动程序:
self.driver = GraphDatabase.driver(uri="bolt://localhost:7687",auth=("username","password"))
我现在将此脚本本身放入 Docker 容器中,但我现在收到错误消息:
neo4j.exceptions.ServiceUnavailable: Failed to establish connection to IPv6Address(('::1',7687,0)) (reason [Errno 99] Cannot assign requested address)
从另一个 docker 容器访问 neo4 Docker 实例需要更改什么 uri(或其他参数)?
在我的 docker-compose.yml 中,我有:
version: '3'
services:
neo4j:
container_name: neo4j
image: neo4j:3.5
restart: always
environment:
- NEO4J_dbms_memory_pagecache_size=2G
- dbms_connector_bolt_tls__level=OPTIONAL
- NEO4J_dbms_memory_heap_max__size=3500M
- NEO4J_AUTH=neo4j/start
volumes:
- $HOME/neo4j/data:/data
- $HOME/neo4j/logs:/logs
- $HOME/neo4j/import:/import
- $HOME/neo4j/plugins:/plugins
ports:
- 7474:7474
- 7687:7687
appgui:
container_name: appgui
image: python:3.7.3-slim
build:
context: ./APPGUI/
volumes:
- ./APPGUI/:/usr/src/app/
restart: always
environment:
PORT: 5000
FLASK_DEBUG: 1
ports:
- 80:80
depends_on:
- neo4j
我也无法访问我的网络应用程序 (http://localhost:5000)
解决方法
您的服务无法连接到 localhost Neo4j,因为它位于 docker 容器内,而 localhost 指向的是 docker 容器而不是您的本地机器。
在这种情况下,最好使用 docker-compose 运行两个容器。您想在另一个 docker 容器中设置依赖项功能。这是我项目中的示例 docker-compose.yml
文件。
version: '3.7'
services:
neo4j:
image: neo4j:4.1.2
restart: always
hostname: neo4jngs
container_name: neo4jngs
ports:
- 7474:7474
- 7687:7687
api:
build:
context: ./API
hostname: api
restart: always
container_name: api
ports:
- 3000:3000
depends_on:
- neo4j
如您所见,api 容器是一个将连接到 Neo4j 的服务。现在您可以将驱动程序设置更改为:
self.driver = GraphDatabase.driver(uri="bolt://neo4j:7687",auth=("username","password"))
你可以走了。
,我解决了它,这实际上是一个愚蠢的错误,但我猜可能会发生在其他人身上......
在docker-compose.yml
:
build: ./APP1/
需要用引号引起来,所以:
build: './APP1/'
然而,Tomaž Bratanič 为我提供了一些有用的提示来解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。