有没有一种方法可以使用通用主机将调试秘密从asp.net控制台应用程序传递给docker容器?

时间:2019-02-06 03:35:36

标签: c# asp.net docker visual-studio-2017

我正在使用Visual Studio和usersecrets在asp.net中设置一个新的Docker容器。从容器内调试时如何访问用户提示?

容器是一个托管通用服务的linux容器,如果我提供appsettings.json文件,它可以正常工作,但不会填充secrets.json形式的信息。附带说明一下,我确实将其与标准的asp.net控制台应用程序配合使用。

我已经通过https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.2&tabs=windows失败了。

我也浏览了https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.2页。

似乎没有指向将它们与docker容器一起使用的

  `var builder = new HostBuilder()
    .ConfigureHostConfiguration(configHost =>
    {
      configHost.SetBasePath(Directory.GetCurrentDirectory());
      configHost.AddJsonFile("hostsettings.json", optional: true);
      configHost.AddEnvironmentVariables(prefix: "PREFIX_");

      if (args != null)
      {
        configHost.AddCommandLine(args);
      }

    })
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
      config.AddJsonFile("appsettings.json", optional: true);

      if(hostingContext.HostingEnvironment.IsDevelopment())
      {
        config.AddUserSecrets<SecretStuff>();
      }
    })
    .ConfigureServices((hostContext, services) =>
    {
      services.Configure<SecretStuff> (hostContext.Configuration.GetSection(nameof(SecretStuff)));
      services.Configure<ProcessFileSettings>(hostContext.Configuration);
      services.AddScoped<Interfaces.IFileUploader, WebClients.FileUploader>();
      services.AddHostedService<FolderLookupHostedService>();
    });

  await builder.RunConsoleAsync();'

1 个答案:

答案 0 :(得分:0)

在我的同事的帮助下,我们找到了解决方案。

您需要在docker-compose.yml文件中添加一个指向usersecrets位置的卷值。

noHeading

添加Container Orchestrator支持时,Visual Studio 2017不会在控制台应用程序(.Net Core)项目中将卷行添加到生成的撰写文件中,而是在ASP.NET Core Web应用程序中添加。