我知道这看起来是重复的,但是我检查了所有其他的问题,没有一个解决了我的问题。
这是我的docker-compose yml文件:
version: '3.8'
services:
#db:
# image: postgres
messageBroker:
image: rabbitmq:management
hostname: "messageBroker"
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 5s
timeout: 15s
retries: 3
networks:
- services-network
ports:
- "15672:15672"
- "5672:5672"
environment:
RABBITMQ_DEFAULT_USER: "admin"
RABBITMQ_DEFAULT_PASS: "password"
serviceDiscovery:
image: steeltoeoss/eureka-server
hostname: eureka-server
networks:
- services-network
ports:
- "8761:8761"
order-api:
image: ${DOCKER_REGISTRY-}orderapi
hostname: orderapi
environment:
- Eureka__Client__ServiceUrl=http://serviceDiscovery:8761/eureka/
- Eureka__Client__ShouldRegisterWithEureka=true
- Eureka__Client__ValidateCertificates=false
networks:
- services-network
depends_on:
- serviceDiscovery
build:
context: .
dockerfile: Services/Order/Dockerfile
links:
- "serviceDiscovery"
product-api:
image: ${DOCKER_REGISTRY-}productapi
hostname: productapi
restart: on-failure
environment:
- Eureka__Client__ServiceUrl=http://serviceDiscovery:8761/eureka/
- Eureka__Client__ShouldRegisterWithEureka=true
- Eureka__Client__ValidateCertificates=false
networks:
- services-network
depends_on:
messageBroker:
condition: service_healthy
serviceDiscovery:
condition: service_started
build:
context: .
dockerfile: Services/Products/Dockerfile
links:
- "serviceDiscovery"
- "messageBroker"
networks:
services-network:
这是我连接到RabbitMq的配置文件:
using RabbitMQ.Client;
namespace MessageBroker;
public static class MessageBrokerConfig
{
public static IModel ChannelConfig()
{
var channel = new ConnectionFactory { Uri = new Uri("amqp://admin:password@messageBroker:5672") }
.CreateConnection()
.CreateModel();
return channel;
}
}
但当我运行docker-compose时,仍然出现错误:
product-api_1 | Unhandled exception. RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable
product-api_1 | ---> System.AggregateException: One or more errors occurred. (Connection failed)
product-api_1 | ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed
product-api_1 | ---> System.Net.Sockets.SocketException (111): Connection refused
产品服务可以在服务发现中注册,没有任何问题,我遵循了几乎相同的步骤。我知道问题不在于rabbitmq容器需要时间来准备好,因为我可以在我的机器上连接。每次产品服务启动失败,它都会重新启动,但无论花费多少时间,我仍然得到这个错误。messageBroker容器的日志显示它是健康的(如果不是,我将无法通过我的机器访问).我没有任何其他的想法,我对这个问题3天alredy和我要疯了.我检查了教程,按照步骤去做却什么都没有。
3条答案
按热度按时间xzv2uavs1#
解决了,伙计们!配置是正确的。但是,每当我创建一个新容器时,它都不会构建。因此,即使我更改了代码,它仍然具有第一个版本代码的映像。所以我做的唯一的事情就是删除服务的映像,Docker用正确的代码创建了一个新的映像。我认为这显然是一个临时的解决方案,因为它每次运行时都要构建/创建一个新的容器。但这是另一个主题,我认为它不会很难实现。也许用docker compose中的argx 1 m0n1x就足够了。但我只会在后面给予这个问题。
jk9hmnmh2#
你的docker-compose文件没有正确的网络设置。我想你不需要链接。这里是一个最小的docker-compose,为我工作。我删除了链接,我删除了服务发现,这是不是在这里发挥作用的连接rabbitClient和代理。
eagi6jfj3#
在docker-compose上,在网络中缺少了一些东西,把它这样写: