Подключение к драйверу neo4 (в контейнере Docker) из другого контейнера Docker

Обычно у меня есть экземпляр 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)

localhost в Docker обычно означает «этот контейнер». Сеть в Compose в документации Docker описаны имена хостов, которые необходимо использовать для подключения к другим контейнерам.
David Maze 22.12.2020 13:54

@DavidMaze: проблема, с которой я теперь сталкиваюсь после выполнения «после выполнения docker-compose up», заключается в том, что «выход из appgui с кодом 0». Докер-контейнер neo4j работает (localhost: 7474 ), но то же самое для веб-приложения не работает ( localhost: 5000)

pymat 22.12.2020 15:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
347
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваш сервис не может подключиться к локальному хосту 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, но это не сработало. Спасибо

pymat 22.12.2020 13:20

Я также получил «выход из приложения с кодом 0» после выполнения docker-compose up

pymat 22.12.2020 13:27

Я решил это, и на самом деле это была глупая ошибка, но, думаю, она могла случиться и с другими... В docker-compose.yml:

build: ./APP1/

нужно в кавычках, поэтому:

build: './APP1/'

Однако Томаш Братанич дал мне несколько полезных советов, чтобы найти решение.

Другие вопросы по теме