【发布时间】:2021-11-03 10:48:39
【问题描述】:
我正在开发 .net core 3.1 服务工作者。我已经创建了一个 docker 模板,并且能够创建和启动我的容器。所以现在我需要在端口 1111 和端口 2222 上创建相同服务 1 的 2 个副本。
我的 appsettings.json 有一个变量
{
....
Service :
{
Port: "1111"
}
如果我启动从 appsettings.json 读取的第一个容器并且端口设置为 1111,那么现在我需要覆盖端口。我创建了一个撰写文件:
version: '3.4'
services:
broker:
environment:
SERVICE__PORT: 9999
image: ${DOCKER_REGISTRY-}service1
build:
context: .
dockerfile: service1\Dockerfile
volumes:
- ./Settings/appsettings.docker.json:c:/app/appsettings.json
- ./Logs:c:/app/logs
但没有变量覆盖。我添加了
FROM mcr.microsoft.com/dotnet/sdk:3.1
WORKDIR /app
ENV SERVICE__PORT=1234
COPY . .
ENTRYPOINT ["dotnet", "service1.dll"]
如果我调试我的代码,我会看到很多关闭提供程序,而在 EviromentSet 上我会看到我的 var。 在 CreateHostBuilder 上,我添加了一些部分来添加登录
host.ConfigureLogging(
loggingBuilder =>
{
loggingBuilder.ClearProviders();
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var loggerConfig = new LoggerConfiguration()
.ReadFrom.Configuration(configuration);
var logger = loggerConfig.CreateLogger();
loggingBuilder.AddSerilog(logger, dispose: true);
}
);
当我的服务启动时,我尝试通过配置服务获取价值
public Worker(ILogger<Worker> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
...
private async Task StartServer()
{
try
{
....
var port = _configuration["Service:Port"] == ""
? 9876
: Convert.ToInt32(_configuration["Service:Port"]);
....
}
我也尝试通过 compose 挂载卷,但如果我通过 -v 开关运行 docker 命令但从 VS2019 无法正常工作,则无法正常工作
【问题讨论】:
标签: c# docker .net-core docker-compose