Сервис Docker не подключается к сети, указанной в docker-compose без ручных команд - PullRequest
0 голосов
/ 29 декабря 2018

Я боролся с этим немного сегодня вечером.

У меня есть файл составления докера с несколькими службами, RabbitMQ и некоторыми службами тестирования отправителя / получателя.

Я сократил файл docker-compose.yml до самого его основания, так что это просто RabbitMQ и один тестовый сервис, но у меня все еще остается та же проблема: тестовый сервис не подключается автоматически к сети, а тестовый сервиспоэтому терпит неудачу.Я попытался вручную указать сеть в файле compose, но это не помогло.В тот момент, когда он запускается, происходит сбой с ошибкой.

Странно, если я запускаю docker network connect <networkname> <containerID>, а затем docker container start <containerID>, он присоединяется к сети и работает, как и ожидалось.

Вот мой docker-compose.yml:

version: '3'

services:

  sender:
    image: sender_test
    depends_on:
      - some-rabbit
    volumes:
      - /var/log/sender

  some-rabbit:
    image: rabbitmq:3
    hostname: some-rabbit
    ports:
      - 5672:5672

и ошибка, которую я получаю в журналах контейнера sender:

/usr/local/bundle/gems/bunny-2.13.0/lib/bunny/session.rb:333:in `rescue in start': Could not establish TCP connection to any of the configured hosts (Bunny::TCPConnectionFailedForAllHosts)
    from /usr/local/bundle/gems/bunny-2.13.0/lib/bunny/session.rb:305:in `start'
    from ./sender.rb:23:in `initialize'
    from ./sender.rb:83:in `new'
    from ./sender.rb:83:in `<main>'
W, [2018-12-29T04:00:53.179458 #1]  WARN -- #<Bunny::Session:0x55e4c3ae45b8 guest@some-rabbit:5672, vhost=/, addresses=[some-rabbit:5672]>: Could not establish TCP connection to some-rabbit:5672: Connection refused - connect(2) for 172.24.0.2:5672

У кого-нибудь есть идеи, что может быть не так?Рад предоставить любую дополнительную информацию по мере необходимости.

РЕДАКТИРОВАТЬ: Поскольку он, очевидно, работает на других системах, опубликую содержимое моих файлов здесь:

sender.rb:

#!/usr/bin/env ruby
require 'bunny'

class QueueAdder
  def initialize
    @connection = Bunny.new(host: 'some-rabbit', automatically_recover: false)
    @connection.start
    @channel = @connection.create_channel
  end

  def start(queue_name)
    @queue_name = queue_name
    @queue = @channel.queue(queue_name, durable: true)
    @exchange = @channel.default_exchange
  end

  def add_to_queue(message)
    @channel.default_exchange.publish(message, routing_key: @queue.name, persistent: true)
  end
end

add = QueueAdder.new
add.start('test')
6.times do |i|
  add.add_to_queue(i.to_s)
  #puts "#{i+5}"
  puts 'a'
  sleep 1
end

Dockerfile:

FROM ruby:2.5.1
RUN apt-get update
RUN dpkg --configure -a
ENV TZ=Europe/London
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN gem install pry bunny
WORKDIR /home/
COPY . .
CMD ["ruby", "./sender.rb"]

Я создаю образ с помощью docker image build -t sender_test . и запускаю docker-compose с помощью docker-compose up -d.

1 Ответ

0 голосов
/ 29 декабря 2018

Аргумент depends_on только сообщает compose, что ваш контейнер sender_test зависит от другого (то есть его нужно раскрутить после него)

, но он не связывает контейнеры.

, чтобы связать контейнеры, вам нужно использовать аргумент link

try:

version: '3'

services:

  sender:
    image: sender_test
    depends_on:
      - some-rabbit
    volumes:
      - /var/log/sender
    links:
      - some-rabbit

  some-rabbit:
    image: rabbitmq:3
    hostname: some-rabbit
    ports:
      - 5672:5672

, кстати, в вашем контейнере кролика вы также выставляете порт для хоста,который вам может не понадобиться (т. е. заменить - 5672:5672 просто - 5672), чтобы вы могли открыть контейнер только для другого контейнера, но не снаружи.

Редактировать:

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

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