.NET Core 3.1 覆盖 docker compose 中的自定义值
Posted
技术标签:
【中文标题】.NET Core 3.1 覆盖 docker compose 中的自定义值【英文标题】:.NETCore 3.1 override custom value in docker compose 【发布时间】: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 无法正常工作,则无法正常工作
【问题讨论】:
【参考方案1】:要支持使用环境变量覆盖 appsettings,您必须在创建主机构建器时启用环境变量支持。
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();
最好的问候, 丹尼尔
【讨论】:
有效!我有第二个问题,因为我在 main 上添加了 JsonProvider,但在删除它并添加 Env 变量后一切正常。谢谢以上是关于.NET Core 3.1 覆盖 docker compose 中的自定义值的主要内容,如果未能解决你的问题,请参考以下文章
C# 和 Docker - 无法从容器化 .NET Core 3.1 Web API 连接到容器化 MySQL 服务器
。NET Core 3.1 gRPC Docker:无法使原型路径相对
从.NET Core 3.1(Docker)迁移后,.NET 6 应用程序日志为 JSON 格式 [重复]