簡體   English   中英

容器化的 python 應用程序無法連接到在 Docker 容器上運行的 RabbitMQ 服務器

[英]Containerized python app can't connect to RabbitMQ server running on Docker container

我正在嘗試將我的 Python 應用程序連接到 RabbitMQ 服務器。 Python 應用程序和 RabbitMQ 服務器都在 Docker 容器中運行。 我遇到的問題是我正在嘗試使用我的 Python 應用程序連接到服務器,但收到錯誤消息:

Traceback (most recent call last):
  File "cfg_rpc_server.py", line 9, in <module>
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='rabbitmq'))
  File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 359, in __init__
    self._impl = self._create_connection(parameters, _impl_class)
  File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 450, in _create_connection
    raise self._reap_last_connection_workflow_error(error)
  File "/usr/local/lib/python3.8/site-packages/pika/adapters/utils/selector_ioloop_adapter.py", line 562, in _resolve
    result = socket.getaddrinfo(self._host, self._port, self._family,
  File "/usr/local/lib/python3.8/socket.py", line 914, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

docker-compose.yml

version: '3.4'

services:
  seq:
    image: datalust/seq:latest

  rabbitmq:
    image: rabbitmq:3.8.1-management-alpine

  mongodb:
    image: mongo
    volumes:
      - mongodb_volume:/data/db

  apigateway:
    image: ${DOCKER_REGISTRY-}apigateway
    build:
      context: .
      dockerfile: src/ApiGateway/Dockerfile

  detection.api:
    image: ${DOCKER_REGISTRY-}detectionapi
    build:
      context: .
      dockerfile: src/Services/Detection/Detection.API/Dockerfile
    depends_on:
      - rabbitmq
      - mongodb
    volumes:
      - ./data/output:/output

  training.api:
    image: ${DOCKER_REGISTRY-}trainingapi
    build:
      context: .
      dockerfile: src/Services/Training/Training.API/Dockerfile
    depends_on:
      - rabbitmq
      - mongodb

  webmvc:
    image: ${DOCKER_REGISTRY-}webmvc
    build:
      context: .
      dockerfile: src/Web/WebMVC/Dockerfile      

  mgr: # My python app
    image: ${DOCKER_REGISTRY-}mgr
    build:
        context: .
        dockerfile: src/BuildingBlocks/ConfigManager/Dockerfile
    depends_on:
      - rabbitmq
      - mongodb
volumes:
  mongodb_volume:
    external: false

用於 Python 應用程序的 Dockerfile

FROM python:slim-buster

RUN mkdir /app
WORKDIR /app
COPY ["src/BuildingBlocks/ConfigManager", "."]

RUN pip install -r requirements.txt

CMD ["python", "cfg_rpc_server.py"]

Python App 代碼片段:

import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='rabbitmq'))

我還檢查了所有容器是否在同一個網絡中,它們是否在

PS C:\Windows\system32> docker network inspect c6818581e269
[
    {
        "Name": "dockercompose6314373887499575973_default",
        "Id": "c6818581e269d602cd6f774747845552341fb282d6be780049e716b5ad0c7be3",
        "Created": "2019-12-06T15:37:10.8675273Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.26.0.0/16",
                    "Gateway": "172.26.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "10fd0dd1cc98770ddd69c5d9ce07d51a6714a9f9826a27fb8d52309f5a2055e3": {
                "Name": "Detection.API",
                "EndpointID": "d21f3433119f6671a214ba48513160ba5af9441829ca29da1edbcf79bd137098",
                "MacAddress": "02:42:ac:1a:00:09",
                "IPv4Address": "172.26.0.9/16",
                "IPv6Address": ""
            },
            "325c6dda2bd14b4d08c6dbbf37672823529accac1d5152aadf336f96688f8923": {
                "Name": "Training.API",
                "EndpointID": "51124c1531d93cc718c1c4cfd92b2ea6ff1ac2f5cc0512db3993e90532199874",
                "MacAddress": "02:42:ac:1a:00:08",
                "IPv4Address": "172.26.0.8/16",
                "IPv6Address": ""
            },
            "3941454d159d0665851b332c89494eda137f95f8ae48b3731a3ebe6189defb85": {
                "Name": "dockercompose6314373887499575973_mgr_1",
                "EndpointID": "9d92c5aae7ce6e794d2e158fd3709bc1df726c937f4d681f8aaf0ef6be307291",
                "MacAddress": "02:42:ac:1a:00:03",
                "IPv4Address": "172.26.0.3/16",
                "IPv6Address": ""
            },
            "5d0971e9091fa431c0a9820d6ff492c3abbc3a1e58009e9a518f4e6c0a244bd0": {
                "Name": "ApiGateway",
                "EndpointID": "a81fe63e9d607ae91a35c06f9a9f400c795a1d287b3bbfa9ccfa41cd0e068240",
                "MacAddress": "02:42:ac:1a:00:04",
                "IPv4Address": "172.26.0.4/16",
                "IPv6Address": ""
            },
            "929290c65a1c2cdcd212383049b37632d7cb86bde5f7870a7f925ff30dac633c": {
                "Name": "dockercompose6314373887499575973_seq_1",
                "EndpointID": "9753b94aeac93dad134bec6689a6c4daed2c6199f5b702f4bee8c90554838ee5",
                "MacAddress": "02:42:ac:1a:00:06",
                "IPv4Address": "172.26.0.6/16",
                "IPv6Address": ""
            },
            "92a18333f5ca808872aadf55a1a4a917c9094b8dc4798df483f3003d4e8a3476": {
                "Name": "dockercompose6314373887499575973_rabbitmq_1",
                "EndpointID": "29340f69550353c3d53f71829541112ad71a67d4c795121297b573b9d7a42ccb",
                "MacAddress": "02:42:ac:1a:00:05",
                "IPv4Address": "172.26.0.5/16",
                "IPv6Address": ""
            },
            "c96dacaa40a4aa1898dce05402054d8a36d9f144837cb83cc1345dbbdb46ae33": {
                "Name": "WebMVC",
                "EndpointID": "a976bb304e22f55f16b74588f3ef972b7d7b00a3fa28b3784e6e57cbd7e96599",
                "MacAddress": "02:42:ac:1a:00:02",
                "IPv4Address": "172.26.0.2/16",
                "IPv6Address": ""
            },
            "d690db70785a7c7cb975ce9a8162ff8e41dd7aadc6e58f506a94df5d194b269d": {
                "Name": "dockercompose6314373887499575973_mongodb_1",
                "EndpointID": "5279d09e077d1c1f0becb611ff31f16d84d388cfe4cbc2357371b895ceddd83c",
                "MacAddress": "02:42:ac:1a:00:07",
                "IPv4Address": "172.26.0.7/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "dockercompose6314373887499575973",
            "com.docker.compose.version": "1.24.1"
        }
    }
]

我也嘗試在不同的圖像上運行 Python 應用程序,然后檢查nslookup rabbitmq並且我收到了 rabbitmq 服務器的正確 IP 地址。 在這一點上,我想我已經嘗試了一切,但我不知道還有什么要檢查的。 知道如何解決這個問題嗎? 另一件事是我的 .NET Core 應用程序與rabbitmq主機連接沒有任何問題。

我正在為 Windows 運行 Docker。

我相信你錯過了一件事,如果那不起作用,你應該嘗試另一件事。

首先,

您是否公開了必要的端口? 運行容器時執行: docker run -p 15672:15672 -p 5672:5672 <your-rabbitmq-container>

我很肯定這是一個端口問題。

其次,

如果這不起作用,您可以嘗試將host='rabbitmq'替換為host='<ip-address>'您可以通過docker exec -it <ip-address> /bin/bash找到您的 ip-address 並輸入hostname -I在你的容器里

最后,

RabbitMQ 將無法在本地主機之外使用默認訪客用戶工作。 您需要創建一個用戶,以便您可以在本地主機之外使用它。 但是,首先只需添加端口並嘗試!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM