Обычно у меня есть экземпляр neo4j, работающий в Docker, а затем в сценарии я обращаюсь к драйверу следующим образом:
self.driver = GraphDatabase.driver(uri = "bolt://localhost:7687", auth=("username", "password"))
Сейчас я помещаю этот скрипт в контейнер Docker, но теперь получаю сообщение об ошибке:
neo4j.exceptions.ServiceUnavailable: Failed to establish connection to IPv6Address(('::1', 7687, 0, 0)) (reason [Errno 99] Cannot assign requested address)
Какой uri (или другой параметр) необходимо изменить для доступа к экземпляру neo4 Docker из другого контейнера Docker?
В моем 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)
@DavidMaze: проблема, с которой я теперь сталкиваюсь после выполнения «после выполнения docker-compose up», заключается в том, что «выход из appgui с кодом 0». Докер-контейнер neo4j работает (localhost: 7474 ), но то же самое для веб-приложения не работает ( localhost: 5000)
Ваш сервис не может подключиться к локальному хосту Neo4j, потому что он находится внутри контейнера докеров, а локальный хост указывает на контейнеры докеров, а не на ваш локальный компьютер.
В этом случае лучше всего запускать оба контейнера с помощью docker-compose. Вы хотите установить зависимость от функции в другом контейнере докеров. Вот пример файла 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, но он не настроен так, как у вас. Поэтому я внес некоторые изменения. Я попытался загрузить страницу с localhost: 5000, но это не сработало. Спасибо
Я также получил «выход из приложения с кодом 0» после выполнения docker-compose up
Я решил это, и на самом деле это была глупая ошибка, но, думаю, она могла случиться и с другими...
В docker-compose.yml
:
build: ./APP1/
нужно в кавычках, поэтому:
build: './APP1/'
Однако Томаш Братанич дал мне несколько полезных советов, чтобы найти решение.
localhost
в Docker обычно означает «этот контейнер». Сеть в Compose в документации Docker описаны имена хостов, которые необходимо использовать для подключения к другим контейнерам.