Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails向其他容器发送请求[无法打开TCP连接]_Ruby On Rails_Docker_Docker Compose - Fatal编程技术网

Ruby on rails Rails向其他容器发送请求[无法打开TCP连接]

Ruby on rails Rails向其他容器发送请求[无法打开TCP连接],ruby-on-rails,docker,docker-compose,Ruby On Rails,Docker,Docker Compose,我正试图通过多个Rails节点+docker+MySQL+Redis来实现多节点分发系统 因此,我的主节点需要与其他节点通信 这是我的docker compose.yml **version: '2' services: db: image: mysql:5.7 restart: always environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=pubsub_1_develo

我正试图通过多个
Rails节点+docker+MySQL+Redis
来实现多节点分发系统

因此,我的主节点需要与其他节点通信

这是我的docker compose.yml

**version: '2'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=pubsub_1_development
      - MYSQL_USER=appuser
      - MYSQL_PASSWORD=password
    ports:
      - "3308:3306"

  redis:
    image: 'redis:4.0-alpine'

  app:
    image: pubsub_2:1.0.8
    command: /bin/sh -c "rm -f ./tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - ".:/pubsub_2"
    ports:
      - "3001:3000"
    depends_on:
      - db
      - redis
      - sub_node
      - pub_node
    links:
      - db
      - redis
      - sub_node
      - pub_node
    environment:
      DB_USER: root
      DB_NAME: pubsub_1_development
      DB_PASSWORD: password
      DB_HOST: db
      REDIS_CABLE_PORT: redis://redis:6379/1
      SUB_NODE: 0.0.0.0:4001
      PUB_NODE: 0.0.0.0:4000
    stdin_open: true
    tty: true

  sub_node:
    image: sub_node:1.0.1
    command: /bin/sh -c "rm -f /sub_node/tmp/pids/server.pid && bundle exec rails s -p 4001 -b '0.0.0.0'"
    ports:
      - "4001:4001"
    environment:
      DB_USER: root
      DB_NAME: pubsub_1_development
      DB_PASSWORD: password
      DB_HOST: db
      REDIS_CABLE_PORT: redis://redis:6379/1
    tty: true
    expose:
      - "4001"


  pub_node:
    image: pub_node:1.0.1
    command: /bin/sh -c "rm -f /pub_node/tmp/pids/server.pid && bundle exec rails s -p 4000 -b '0.0.0.0'"
    ports:
      - "4000:4000"
    environment:
      DB_USER: root
      DB_NAME: pubsub_1_development
      DB_PASSWORD: password
      DB_HOST: db
      REDIS_CABLE_PORT: redis://redis:6379/1
    tty: true
    expose:
      - "4000"**
但是,当我尝试使用
app
节点将请求发送到
pub_节点
时,它抛出了此错误

Errno::ECONNREFUSED: Failed to open TCP connection to 127.0.0.1:4000 (Connection refused - connect(2) for "127.0.0.1" port 4000)
from /usr/local/lib/ruby/2.5.0/net/http.rb:939:in `rescue in block in connect'
我用这个代码做了
post

rvlist = '127.0.0.1:4000'
HTTParty.post("http://#{rvlist}/publish", options)

它在我的开发模式下工作,没有docker环境。

在docker compose中联网:

服务的每个容器都加入默认网络,并且都是 可由该网络上的其他容器访问,并可由 它们的主机名与容器名称相同

参考:


在您的情况下,docker compose中的任何容器都可以使用其容器名称和端口打开到
pub\u节点的TCP连接
pub\u节点:4000

您可以尝试使用
rvlist='pub\u节点:4000'
发布
吗?是!!!它起作用了!!请你回答这个问题并留下一些文件或参考资料好吗?我会选择你作为答案!