1

这是我的问题:我无法通过螺栓端口(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;
}
4

0 回答 0