C# .Net Core控制台应用程序未在Docker容器中运行

C# .Net Core控制台应用程序未在Docker容器中运行,c#,docker,.net-core,dockerfile,console-application,C#,Docker,.net Core,Dockerfile,Console Application,在Visual Studio中调试时,我的.Net Core 2.1控制台应用程序运行良好。日志发布精细到弹性搜索,在Kabana中可见。当我尝试在容器中部署此应用程序时,我不会将任何日志发布到ES。当我键入Docker logs时,我也看不到Docker日志-我在下面包含了我的程序类和Docker文件。我是Docker的新手,有什么明显的遗漏吗?我需要打开一些端口还是什么?像这样在Docker中使用appsettings.json文件可以吗?这会引起问题吗 using System.Threa

在Visual Studio中调试时,我的.Net Core 2.1控制台应用程序运行良好。日志发布精细到弹性搜索,在Kabana中可见。当我尝试在容器中部署此应用程序时,我不会将任何日志发布到ES。当我键入
Docker logs
时,我也看不到Docker日志-我在下面包含了我的程序类和Docker文件。我是Docker的新手,有什么明显的遗漏吗?我需要打开一些端口还是什么?像这样在Docker中使用
appsettings.json
文件可以吗?这会引起问题吗

using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using RizbotCore.BitmexTrader.Controllers;
using RizbotCore.BitmexTrader.Services;
using Serilog;
using Serilog.Sinks.Elasticsearch;

namespace RizbotCore.BitmexTrader
{
    class Program
    {
        static async Task Main(string[] args)
        {
            //setup our DI
            var serviceProvider = new ServiceCollection()
                .AddLogging()
                .AddSingleton<ITraderMain, TraderMain>()
                .BuildServiceProvider();

            // Adding JSON file into IConfiguration.
            IConfiguration config = new ConfigurationBuilder()
                 .AddJsonFile("appsettings.json", true, true)
                 .Build();

            // Read configuration
            var appSettings = config.GetSection("ElasticConfiguration");
            string esURL = appSettings["ES_URL"];

            // Set up Logging
            Log.Logger = new LoggerConfiguration()
             .MinimumLevel.Debug()
             .Enrich.FromLogContext()
             .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(esURL))  
             {
                 AutoRegisterTemplate = true,
             })
             .CreateLogger();

            Log.Information("Starting Up...");

            // Start Main Manager
            var traderMain = serviceProvider.GetService<ITraderMain>();
            await traderMain.Start(serviceProvider);

            Console.ReadLine();
        }
    }
}

您需要在dockerfile中为所有需要的通信公开所需的端口,即
expose 80
。然后,在刚刚从dockerfile创建的映像上执行
docker run
时,您需要将暴露的端口映射到外部,即
docker run-p 80:80
您需要暴露dockerfile中所有通信所需的端口,即
expose 80
。然后,当对刚从docker文件中创建的图像执行
docker run
时,您需要映射外部暴露的端口,即
docker run-p 80:80

尝试在不将容器从控制台分离的情况下运行容器(即不要在
docker run
命令上指定
-d
标志)。通常这有助于我了解问题所在。请尝试在不将容器与控制台分离的情况下运行容器(即不要在
docker run
命令上指定
-d
标志)。通常这能帮助我发现问题所在。
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
WORKDIR /src
COPY RizbotCore.Trader/RizbotCore.BitmexTrader.csproj RizbotCore.Trader/
COPY RizBotCore.DAL/RizBotCore.DAL.csproj RizBotCore.DAL/
RUN dotnet restore "RizbotCore.Trader/RizbotCore.BitmexTrader.csproj"
COPY . .
WORKDIR "/src/RizbotCore.Trader"
RUN dotnet build "RizbotCore.BitmexTrader.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "RizbotCore.BitmexTrader.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "RizbotCore.BitmexTrader.dll"]