获取 pika.exceptions.StreamLostError:运行使用 pika 的 python 脚本 docker 映像时传输指示 EOF

vis*_*hal 7 python rabbitmq python-3.x pika docker

我正在使用 Python,它使用 RabbitMQ 进行输入和输出。我可以在本地运行我的脚本,没有任何错误,但是当我尝试 Dockerize 该脚本并运行它时,出现以下错误:

Traceback (most recent call last):
File "./Kusto_connection_with_rabbitmq_2.py", line 1674, in <module>
 main()
File "./Kusto_connection_with_rabbitmq_2.py", line 1668, in main
 channel.start_consuming()
File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 1865, 
  in start_consuming
self._process_data_events(time_limit=None)
File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 2026, 
  in _process_data_events    self.connection.process_data_events(time_limit=time_limit)
File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 824, 
  in process_data_events
self._flush_output(common_terminator)
File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 523, 
in _flush_output
 raise self._closed_result.value.error
 pika.exceptions.StreamLostError: Transport indicated EOF
Run Code Online (Sandbox Code Playgroud)

下面是我连接到 RabbitMQ 的 Python 代码:

credentials = pika.PlainCredentials(username, password)
parameters = pika.ConnectionParameters(host=Api_url,virtual_host=rmqvhost,credentials=credentials,heartbeat=0)
print (username,password)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()

channel.queue_declare(queue='test',durable=True)


channel.basic_qos(prefetch_size=0,prefetch_count=1) # this is for acknowdeging packet one by one 
channel.basic_consume(queue='test', on_message_callback=callback,auto_ack=False)


print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
Run Code Online (Sandbox Code Playgroud)

我的 Dockerfile:

FROM python:3.8
WORKDIR /First_try
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY Kusto_connection_with_rabbitmq_2.py .
CMD ["python","./Kusto_connection_with_rabbitmq_2.py"]
Run Code Online (Sandbox Code Playgroud)

我运行我的 Docker 容器

docker run <image_name>
Run Code Online (Sandbox Code Playgroud)

Ole*_*sev 2

我想你的问题是你无法从 docker 容器访问rabbitmq。

是使用 docker-compose 从 python 使用rabbitmq的简单示例,您应该尝试依赖此示例来实现您的解决方案。