这是我的问题:我无法通过螺栓端口(7687)在内部(但在外部工作)将bloom docker容器连接到neo4j docker容器。
概括
我正在建立一个基于 docker 的项目:
- 一个 Neo4j (GraphQL) 作为数据库,在一个 docker 容器中
- 一个作为 neo4j 可视化器的 Bloom 服务器,我将它包含在一个 iframe 中(因为现在没有更好的选择)在一个 react 应用程序中
- 托管在 node:14-alpine docker 镜像上的 react 应用程序。
它全部托管在 AWS EC2 Linux 实例中。所有容器都在同一个 docker 网络上,当我 ping 它们时,无论是使用它们的 docker 名称的 IP 地址,还是使用 curl 来查看它们是否可以相互通信,连接似乎都工作正常。
我试过的
- 如果我去http://my.aws.ec.instance:7474 :我可以看到并使用 Neo4j 浏览器应用程序,没问题。
- 如果我转到http://my.aws.ec.instance:7687(直接螺栓连接),我收到的消息不是“WebSocket 握手请求:缺少升级”,但它似乎不是问题,即使我应该联系的地方。
- 在我的bloom容器内,当我执行'curl my.aws.ec.instance:7687:7687时,我得到了同样的信息。
- 'db' 是我的 docker-compose 服务,'neo4j_c' 是 neo4j 容器名称。
- 当我执行 'curl 172.30.0.2:7687' 的 'curl db:7687' (我的 neo4j 容器的 ip)或 curl neo4j_c:7687 时,我收到相同的消息(«WebSocket 握手请求:缺少升级»)。然后我假设这些连接以相同的方式工作。
如果我去http://my.aws.ec.instance:8000,bloom 'app' 会启动并运行,但这就是我卡住的地方。
为了告诉bloom在哪里可以找到数据库,我必须将地址放在容器/的'discovery.json'文件中,就像这样。
"bolt": "bolt://my_db_address:7687"
如果我使用公共地址“bolt”:“bolt://my_ec2_instance_address:7687»,它可以工作并连接到neo4j数据库容器,但在外部,这绝对不是我想要的。
在尝试使用容器 IP 地址或其名称进行“内部”连接后,我就无法连接,我就是不知道为什么。我试过了 :
"bolt": "bolt://db:7687"
"bolt": "bolt://neo4j_c:7687"
"bolt": "bolt://172.30.0.2:7687"
还有更多的组合,有和没有端口号,协议等......唯一的工作是:
"bolt": "bolt://my_aws_ec2_public_instance:7687"
但我无法使用它,它们在同一个网络上,应该在本地连接。
你们能帮帮我吗?我可能设置了错误...请向我询问您可能需要的任何其他信息。
我希望我说得够清楚了。提前感谢您的任何贡献。
附加信息
Docker 版本 19.03.6-ce,构建 369ce74。
docker-compose 版本 1.27.0,构建 980ec85b
码头工人撰写文件:
services:
db:
container_name: neo4j_c
image: neo4j:4.1.1-enterprise
environment:
- NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
ports:
- 7473:7473
- 7474:7474
- 7687:7687
volumes:
- $HOME/neo4j/data:/data
networks:
- ggnet
bloom:
container_name: bloom_c
build:
context: ./
dockerfile: bloom_dockerfile
volumes:
- ./bloom:/usr/share/nginx/html
ports:
- 8000:80
depends_on:
- db
networks:
- ggnet
networks:
ggnet:
name: ggnet_n
driver: bridge
还有简单的bloom dockerfile:
FROM nginx
COPY ./bloom/discovery.json /
绽放 nginx 容器 default.conf :
listen 80;
listen [::]:80;
listen 7687; #JUST ADDED THAT but it didn't change anything from previous tests..
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
绽放 nginx 容器 nginx.conf :
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}