gpt4 book ai didi

docker - 没有手动命令的Docker服务未加入docker-compose中指定的网络

转载 作者:行者123 更新时间:2023-12-02 20:00:27 26 4
gpt4 key购买 nike

今晚我一直在为此苦苦挣扎。

我有一个docker compose文件,其中包含一些服务,RabbitMQ和一些发送器/接收器测试服务。

我已经将docker-compose.yml文件简化为最基本的内容,因此它只是RabbitMQ和一项测试服务,但我仍然遇到相同的问题:测试服务无法自动连接到网络,因此测试服务失败。我尝试在撰写文件中手动指定网络,但这似乎无济于事。一旦启动,它将失败并显示错误。

奇怪的是,如果我先运行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 up -d启动docker-compose。

最佳答案

depends_on参数仅告诉撰写者sender_test容器依赖于另一个(即,它需要在其后旋转)

但它不链接容器。

链接容器,您需要使用link参数

尝试:

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

顺便说一句,在您的Rabbit容器中,您也将端口暴露给了主机,而这可能是不需要的(即,仅用 - 5672:5672替换 - 5672),以便仅将容器暴露给另一个容器,而不暴露给外部。

编辑:

更有可能的是,发件人代码没有等待服务启动并准备好接收连接,而不是网络问题

关于docker - 没有手动命令的Docker服务未加入docker-compose中指定的网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53966687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com