Я боролся с этим немного сегодня вечером.
У меня есть файл составления докера с несколькими службами, 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
.