【问题标题】:Inbound and Outbound traffic in Docker ComposeDocker Compose 中的入站和出站流量
【发布时间】:2021-11-23 12:12:05
【问题描述】:

我有 3 个 docker 图像; rabbitmq,客户端和发布者图像。在不使用 docker 镜像的情况下,这三个服务在默认端口 5672 上可以很好地通信。

下面是我的docker-compose.yml

version: '3.4'

services:
  rabbitmq.messageclient:
    image: ${DOCKER_REGISTRY-}rabbitmqmessageclient
    ports:
      - "5672" 
    build:
      context: .
      dockerfile: RabbitMQ.Client/Dockerfile

  rabbitmq.producer:
    image: ${DOCKER_REGISTRY-}rabbitmqproducer
    ports:
      - "5672"
    build:
      context: .
      dockerfile: RabbitMQ.Producer/Dockerfile
   
  rabbitmq:
    image: rabbitmq:3-management
    container_name: 'rabbitmq'
    ports:
      - 5672:5672
      - 15672:15672
    volumes:
      - ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/mnesia
      - ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
    networks:
      - rabbitmq_go_net

networks:
  rabbitmq_go_net:
    driver: bridge


我的客户

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["RabbitMQ.Client/RabbitMQ.MessageClient.csproj", "RabbitMQ.Client/"]
RUN dotnet restore "RabbitMQ.Client/RabbitMQ.MessageClient.csproj"
COPY . .
WORKDIR "/src/RabbitMQ.Client"
RUN dotnet build "RabbitMQ.MessageClient.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "RabbitMQ.MessageClient.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "RabbitMQ.MessageClient.dll"]

我的制作人

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["RabbitMQ.Producer/RabbitMQ.Producer.csproj", "RabbitMQ.Producer/"]
RUN dotnet restore "RabbitMQ.Producer/RabbitMQ.Producer.csproj"
COPY . .
WORKDIR "/src/RabbitMQ.Producer"
RUN dotnet build "RabbitMQ.Producer.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "RabbitMQ.Producer.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "RabbitMQ.Producer.dll"]

我的主机名是:localhost 我无法在rabbitmq.messageclientrabbitmq.producer 服务之间发送和接收数据。我错过了什么?

【问题讨论】:

    标签: docker docker-compose rabbitmq


    【解决方案1】:

    简而言之,每个容器的行为就像一个孤立的机器,容器中的localhost 指的是它的本地网络。两个容器之间的通信与具有各自 IP 地址的两台机器之间的通信相同。 docker-compose 默认为所有容器创建一个桥接网络,因此您可以使用容器的名称连接到它们,Docker 在内部为您进行地址转换。

    不知道为什么要创建一个名为 rabbitmq_go_net 的新桥,但只将 rabbitmq 连接到它。您也可以删除网络或添加另外两个容器。然后在您的rabbitmq.messageclient 容器中,您可以使用rabbitmq:5672 而不是localhost:5672 连接rabbitmq 容器,依此类推。

    docket compose 网络的参考:

    【讨论】:

      【解决方案2】:

      如果您想与撰写文件中的服务进行通信,您应该使用服务名称作为主机名。此外,“端口”部分用于将端口映射到主机,您不需要它来连接服务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-29
        • 2021-04-12
        • 2018-05-30
        • 1970-01-01
        相关资源
        最近更新 更多