I have a Node.js application that connects to neo4j. Running it normally works well, I'm able to connect. However, when I run it inside Docker I run into this error:
Neo4jError: Failed to connect to server. Please ensure that your database is listening on the correct host and port and that you have compatible encryption settings both on Neo4j server and driver. Note that the default encryption setting has changed in Neo4j 4.0. Caused by: connect ECONNREFUSED 127.0.0.1:7687 at newError (/usr/src/app/node_modules/neo4j-driver/lib/error.js:75:10) at NodeChannel._handleConnectionError (/usr/src/app/node_modules/neo4j-driver/lib/internal/node/node-channel.js:229:41) at Socket.emit (events.js:310:20) at emitErrorNT (internal/streams/destroy.js:92:8) at emitErrorAndCloseNT (internal/streams/destroy.js:60:3) at processTicksAndRejections (internal/process/task_queues.js:84:21)
I'm using neo4j-driver v4.0.2, and Neo4j 4.0.3.
I created a repo to reproduce the issue: https://github.com/Layvier/test_neo4j
Am I missing something regarding Docker networking ?
I found this related issue with the python driver: https://github.com/neo4j/neo4j-python-driver/issues/251#issuecomment-420160271
Thanks for your help !
Where is the neo4j instance?? is this in the same container?? If neo4j is outside, the container can´t see its local server (because the container is isolate from the world, is similar to VM), you should have a neo4j server with public and visible IP. You can use neo4j sandbox if you want to test neo4j.
@Layvier, could you solve your issue ?
I'm also unable to connect to my neo4j container from another container, while I have no issues connecting to the same neo4j container from my system cypher-shell or neo4j desktop.
--- version: '3.8' services: neo4j: build: ./neo4j_db ports: - 57473:7473 # HTTPS - 57474:7474 # HTTP - 57687:7687 # BOLT environment: # https://neo4j.com/docs/labs/neo4j-streams/current/docker/#neo4j_streams_docker - NEO4J_dbms_ssl_policy_bolt_client__auth=NONE - NEO4J_dbms_ssl_policy_https_client__auth=NONE - NEO4J_dbms_security_procedures_unrestricted=apoc.* - NEO4J_apoc_import_file_enabled=true - NEO4J_apoc_export_file_enabled=true - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes - NEO4J_AUTH=none api: build: ./api_server ports: - 54001:4001 environment: - NEO4J_URI=bolt://neo4j:57687 # https://neo4j.com/docs/driver-manual/current/client-applications/#driver-configuration-examples - NEO4J_USER=neo4j - GRAPHQL_LISTEN_PORT=4001 - GRAPHQL_URI=http://api:54001/graphql links: - neo4j depends_on: - neo4j networks: default:
When querying my API server (apollo), I get
api_1 | Failed to connect to server. Please ensure that your database is listening on the correct host and port and that you have compatible encryption settings both on Neo4j server and driver. Note that the default encryption setting has changed in Neo4j 4.0. Caused by: connect ECONNREFUSED 172.19.0.2:57687
@AdrienLemaire Hey, for me it was a host issue, I got the solution here: https://stackoverflow.com/questions/61807703/unable-to-connect-to-neo4j-from-a-docker-instance.
I'm not sure how it works with docker compose 😕