Neo4j docker-compose образ, отказывающийся от подключения к приложению - PullRequest
0 голосов
/ 23 июня 2019


Я использовал для запуска Neo4j отдельно, а затем мое приложение взаимодействовало с ним по мере необходимости. Теперь я использую docker-compose для запуска Neo4j.

Вот моя часть neo4j в файле Docker.

  neo4j:
    container_name: neo4j_container
    restart: always
    image: neo4j:3.5.3
    network_mode: "bridge"
    ports:
      - "7474:7474"
      - "6477:6477"
      - "7687:7687"
      - "7473:7473"
    environment:
      - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
      - NEO4J_dbms_security_procedures_unrestricted=apoc.*
      - NEO4J_apoc_import_file_enabled=true
      - NEO4J_dbms_shell_enabled=true
      - NEO4J_dbms_connector_http_listen__address=:7474
      - NEO4J_dbms_connector_https_listen__address=:6477
      - NEO4J_dbms_connector_bolt_listen__address=:7687
    volumes:
      - /usr/local/abc/temp:/var/lib/neo4j/import

Изображение Neo4j Я использую, как видите, neo4j:3.5.3.
Когда я пытаюсь получить доступ к neo4j после docker-compose up из localhost:7474, он работает совершенно нормально.
Но когда я пытаюсь получить к нему доступ через свое приложение, оно выдает следующую ошибку

Unable to connect to localhost:7687, ensure the database is running and that there is a working network connection to it.<br>

Пытался получить помощь по этому вопросу, но даже , что не помогло.
Вот вывод docker-compose ps: enter image description here Пожалуйста, скажите мне, если я что-то упустил?

1 Ответ

0 голосов
/ 24 июня 2019

Вы должны использовать machine-ip:7687 в своем приложении для подключения к neo4j.

В вашем случае neo4j работает в режиме bridge network, в котором сеть контейнеров отличается от сети хоста. Таким образом, чтобы получить доступ к приложению, работающему внутри такого контейнера, из внешнего мира, вам нужно сделать сопоставление портов , которое вы сделали, используя поле ports: в docker-compose.

Теперь я предполагаю, что приложение, которое пытается получить доступ к neo4j, также работает в bridge сетевом режиме. Таким образом, размещение localhost:7687 в вашем приложении будет указывать на localhost этого контейнера, но вы хотите подключиться к neo4j порту контейнера 7687, который мы уже сопоставили с сетью хоста, используя опцию ports. В этом случае к вашему neo4j порту 7687 можно получить доступ, используя machine-ip:7687 из внешнего мира.

Надеюсь, это поможет.

...