.net-core - 无法连接到使用 FluentDocker 创建的容器
问题描述
我正在使用 FluentDocker 进行一些集成测试。容器在 docker-compose 中定义:
version: '3.4'
services:
zookeeper:
image: confluentinc/cp-zookeeper:5.5.6
container_name: "zookeeper"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
kafka:
image: confluentinc/cp-kafka:5.5.6
container_name: "kafka"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
ports:
- 29092:29092
mongodb:
image: mongo:5.0
container_name: "mongodb"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: MyPassw0rd_123
MONGO_INITDB_DATABASE: broker-messages
volumes:
- mongodata:/data/db
- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
ports:
- "27017:27017"
volumes:
mongodata:
然后,我使用以下代码来启动服务:
public class DockerComposeFixture : IDisposable
{
private readonly ICompositeService compositeServices;
public DockerComposeFixture()
{
var file = Path.Combine(Directory.GetCurrentDirectory(), (TemplateString)"Resources", "docker-compose.yml");
compositeServices = Fd.UseContainer()
.UseCompose()
.ForceRecreate()
.ServiceName("test-services")
.FromFile(file)
.RemoveOrphans()
.ForceRecreate()
.Build()
.Start();
}
public ICompositeService CompositeServices => compositeServices;
public void Dispose()
{
compositeServices?.Dispose();
GC.SuppressFinalize(this);
}
}
这是我的测试课:
public class BrokerFacadeApiIntegrationTests : IClassFixture<DockerComposeFixture>, IClassFixture<CustomWebApplicationFactory<Startup>>
{
private readonly DockerComposeFixture dockerCompose;
private readonly CustomWebApplicationFactory<Startup> factory;
public BrokerFacadeApiIntegrationTests(DockerComposeFixture dockerCompose, CustomWebApplicationFactory<Startup> factory)
{
this.dockerCompose = dockerCompose;
this.factory = factory;
}
[Fact]
public async Task ItPublishMessageToBrokerIfItsUp()
{
var bytes = Encoding.UTF8.GetBytes("Hello word!");
var encodedString = Convert.ToBase64String(bytes);
var message = new { contentAsBase64 = encodedString};
var jsonMessage = JsonSerializer.Serialize(message);
var stringContent = new StringContent(jsonMessage, Encoding.UTF8, "application/json");
var client = factory.CreateClient();
var response = await client.PostAsync("/api/v1/messagebroker/topics/test-topic/messages", stringContent);
Assert.True(response.IsSuccessStatusCode);
}
}
在 appsetings.json 中,我指向 localhost:
"KafkaSeting": {
"BootstrapServers": "localhost:29092",
"GroupId": "foo",
"Topic": "dcb",
"NumPartitions": 1,
"ReplicationFactor": 1,
"MessageTimeoutMs": 3000,
"MessageSendMaxRetries": 1
},
"MongoDbConfig": {
"MongoDbConnection": "mongodb://localhost:MyPassw0rd_@mongodb:27017/?authSource=broker-messages",
"Database": "broker-messages"
}
但是,我无法连接到 mongo 或 kafka 服务。我应该怎么做才能找到这些服务?
解决方案
推荐阅读
- 3d - 为什么我在运行 3d max 时一次又一次收到丢失的 MSVCR100?
- c# - 需要帮助打开带有预填充字段的默认电子邮件客户端 ASP.NET
- javascript - JS:实时搜索不适用于两个查询之间的空格
- excel - 自动激活宏,无需单击目标单元格
- python - 为什么可以添加 pd.Timedelta 和 None?
- angular - 在另一个组件中修改一个组件的模板的 CSS
- sql - 有条件地加/减数量
- join - 将 KStream 加入 KTable 时,Kafka KTables 缺少数据
- mysql - 有什么方法可以在不手动进行的情况下加密我的数据?
- html - 在python中将api数据转换为HTML