我正在Traefik之后的Docker中运行Neo4J。 Web界面(7474)在https上公开,可以正常使用。
通过Web界面,我尝试连接到bolt:// localhost:7687,毕竟它在同一个容器中运行,所以我希望它能正常工作。相反,我收到消息:
“ ServiceUnavailable:WebSocket连接失败。由于Web浏览器中的安全限制,因此Neo4j驱动程序不知道失败的原因。请使用浏览器开发控制台来确定失败的根本原因。常见原因包括数据库不可用,使用错误的连接URL或临时网络问题。如果启用了加密,请确保将浏览器配置为信任Neo4j配置为使用的证书。WebSocket readyState
为:3“
反向代理使用由我们公司CA签名的内部证书。 Neo4J容器具有可用的根证书。 客户端连接也具有可用的根证书。
尝试在容器本身中连接到localhost:7687时,它可以按预期工作; Cypher外壳也是如此。
在GitHub上也有一些有关Java版本的帖子,这些帖子可能会导致这些问题-我已经尝试过使用Oracle JDK 8,OpenJDK 8(HotSpot和J9)。
浏览器似乎也不相关-所描述的问题在FF,Chrome和Safari中重现。
答案 0 :(得分:1)
我处于相同的情况,这是我的解决方案,以便在使用Traefik 2.0.2的Docker集群中运行Neo4j实例(在我的情况下为Bloodhound)。由于Traefik的新路由器概念,它非常冗长且难以阅读,因为您必须定义五个路由器。但是至少它可以工作,并且使您能够通过wss和bolt访问Web界面和实际数据库。也许可以简化我的配置。
此外,我在Traefik的文件提供程序提供的动态配置文件中指定了redirectScheme
中间件和由内部PKI签名的证书。
HTH!
version: '3.7'
services:
neo4j:
image: neo4j:latest
networks:
- traefiknet
volumes:
- type: volume
source: data
target: /data
- type: volume
source: logs
target: /logs
- type: volume
source: conf
target: /conf
environment:
- NEO4J_AUTH=neo4j/somepassword
- NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
deploy:
replicas: 1
restart_policy:
condition: any
placement:
constraints:
- node.hostname == node-02
labels:
- traefik.http.services.neo4j.loadbalancer.server.port=7474
- traefik.http.routers.neo4j.rule=Host(`neo4j.dockerswarm.domain.com`)
- traefik.http.routers.neo4j-secure.rule=Host(`neo4j.dockerswarm.domain.com`)
- traefik.http.routers.neo4j.service=neo4j
- traefik.http.routers.neo4j-secure.service=neo4j
- traefik.http.routers.neo4j.middlewares=httpsredirection@file
- traefik.http.routers.neo4j-secure.tls=true
- traefik.http.routers.neo4j.entrypoints=web
- traefik.http.routers.neo4j-secure.entrypoints=web-secure
- traefik.http.services.neo4jdb.loadbalancer.server.port=7687
- traefik.http.routers.neo4jdb.rule=Host(`neo4jdb.dockerswarm.domain.com`)
- traefik.http.routers.neo4jdb-secure.rule=Host(`neo4jdb.dockerswarm.domain.com`)
- traefik.http.routers.neo4jdb.service=neo4jdb
- traefik.http.routers.neo4jdb-secure.service=neo4jdb
- traefik.http.routers.neo4jdb.middlewares=httpsredirection@file
- traefik.http.routers.neo4jdb-secure.tls=true
- traefik.http.routers.neo4jdb.entrypoints=web
- traefik.http.routers.neo4jdb-secure.entrypoints=web-secure
- traefik.tcp.services.neo4jdb.loadbalancer.server.port=7687
- traefik.tcp.routers.neo4jdb.rule=HostSNI(`neo4jdb.dockerswarm.domain.com`)
- traefik.tcp.routers.neo4jdb.service=neo4jdb
- traefik.tcp.routers.neo4jdb.tls=true
networks:
traefiknet:
external: true
volumes:
data:
logs:
conf: