.Net Core Console App не работает в контейнере Docker - PullRequest
0 голосов
/ 30 сентября 2019

Консольное приложение .Net Core 2.1 прекрасно работает при отладке в Visual Studio. Журналы прекрасно отправляются в Elastic Search и видны в Кабане. Когда я пытаюсь развернуть это приложение в контейнере, я не получаю никаких записей в ES. Кроме того, я не вижу журналов Docker, когда я печатаю docker logs <container-id> - я включил мой класс программ и файл Docker ниже. Я новичок в Docker, есть ли что-то очевидное, что я пропустил? Мне нужно открыть несколько портов или что-то? Можно ли использовать файл appsettings.json в Docker, как это? Может ли это вызывать проблемы?

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();
        }
    }
}

Файл Docker:

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"]

1 Ответ

0 голосов
/ 30 сентября 2019

Вам необходимо предоставить необходимые порты в файле docker для всех необходимых вам соединений, например EXPOSE 80. Затем при выполнении docker run над изображением, которое вы только что создали из файла Docker, вам нужно будет сопоставить открытые порты снаружи, т.е. docker run -p 80:80 <yourImageName>

...