Rails отправляет запрос в другой контейнер [Не удалось открыть TCP-соединение] - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь сделать несколько систем распределения узлов по нескольким Rails node + 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_node, он выдает эту ошибку.

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'

Iделал этот код post.

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

Он работает в моем режиме разработки без среды докера.

1 Ответ

0 голосов
/ 14 ноября 2018

Сеть в docker-compose:

Каждый контейнер для службы присоединяется к сети по умолчанию и является одновременно достижимы другими контейнерами в этой сети и обнаруживаются их имя хоста идентично имени контейнера.

Ссылка: https://docs.docker.com/compose/networking/

В вашем случае любой контейнер в docker-compose может открыть TCP-соединение с pub_node контейнером, используя его имя контейнера и порт pub_node:4000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...