Docker部署Neo4j 5.15.0社区版公网IP访问绑定失败求助
问题现象
- 配置Neo4j绑定服务器公网IP后,7474端口HTTP连接失败,容器每分钟重启一次
- neo4j.log报错:
org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.bolt.protocol.common.connector.netty.SocketNettyConnector@2548fc01' was successfully initialized, but failed to start. Please see the attached cause exception "bind(..) failed: Cannot assign requested address".
org.neo4j.configuration.helpers.PortBindException: An error occurred while trying to bind to the socket /<server_public_IP>:7687
io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Cannot assign requested address
- 服务器环境:
Virtualization: amazon
Operating System: Ubuntu 22.04.3 LTS
Kernel: Linux 6.2.0-1017-aws
Architecture: arm64
- 不配置公网IP时,服务器本地访问Neo4j一切正常,Docker状态、端口监听及日志无异常
问题原因
AWS EC2实例的公网IP并非直接绑定在服务器网卡上,而是通过AWS NAT网关实现转发。服务器本地网卡仅持有内网私有IP,直接让Neo4j绑定公网IP会导致端口绑定失败——因为服务器本身没有对应公网IP的网络接口。
解决方法
1. 修正Neo4j绑定地址配置
启动Docker容器时,将Neo4j的监听地址设置为0.0.0.0(允许监听所有内网/容器内的网络接口),而非直接指定服务器公网IP。
示例启动命令:
docker run -d \ --name neo4j \ -p 0.0.0.0:7474:7474 \ -p 0.0.0.0:7687:7687 \ -e NEO4J_AUTH=neo4j/your-password \ -e NEO4J_LISTEN_ADDRESS=0.0.0.0 \ -e NEO4J_BOLT_LISTEN_ADDRESS=0.0.0.0:7687 \ -e NEO4J_HTTP_LISTEN_ADDRESS=0.0.0.0:7474 \ neo4j:5.15.0
2. 配置AWS安全组放行端口
确保EC2实例的安全组规则允许外部访问对应端口:
- 入站规则添加:
- 协议:TCP,端口范围
7474,源地址设置为允许访问的IP段(如0.0.0.0/0表示所有IP,或指定特定IP) - 协议:TCP,端口范围
7687,源地址配置同上
- 协议:TCP,端口范围
3. 验证容器运行状态
启动后检查容器是否正常运行:
docker ps
查看容器日志确认无绑定错误:
docker logs neo4j
4. 远程访问测试
通过http://<服务器公网IP>:7474访问Neo4j控制台,输入配置的用户名密码即可登录。
内容的提问来源于stack exchange,提问作者Andrés Meza-Escallón

