2016-07-02 2 views
4

Я зашел в тупик. У меня есть приложение dotnet core 1.0.0. Я пытаюсь встать и работать. Он отлично работает с Linux и из окон. Теперь я пытаюсь получить его в докер. Я сделал этот Docker файл:Не могу получить доступ к основному веб-сайту Docker DotNet

FROM microsoft/dotnet:1.0.0-preview2-sdk 

COPY . /app 
WORKDIR /app/app 
RUN ["dotnet", "restore"] 

ENTRYPOINT ["dotnet", "run"] 

Это просто просто копирует код в папку приложения в Докер изображения и восстановления зависимостей, а затем запускает его. Когда я пытаюсь запустить его, он запускается, когда все работает и печатает то же самое, что и в Windows или Linux.

Docker Console

Команда для запуска проекта:

docker run --name dotNetWeb -p 8080:8080 kiksen1987/dotnetcore 

Ссылка на код: https://github.com/kiksen1987/dotnetcore

Ссылка на Докер изображение: https://hub.docker.com/r/kiksen1987/dotnetcore/

Я действительно понятия не имею, что не является идет не так. Я более или менее придерживаюсь того же подхода, что и 99% моих других проектов.

Любая обратная связь, чтобы улучшить этот вопрос было бы неплохо как хорошо :)

+0

Я также попытался использовать --expose в файле докеры без его помощи. – Kiksen

+0

По какой-то причине это также кажется localhost: 8080 перенаправляется на http://www.localhost.com:8080/ – Kiksen

+0

И почему черт возьми? для не делать исследования. Я искал google тонкий и использовал несколько часов по этой проблеме. – Kiksen

ответ

9

Наконец.

Я нашел этот блог: http://dotnetliberty.com/index.php/2015/11/26/asp-net-5-on-aws-ec2-container-service-in-10-steps/

Даже если он использовал старую версию ядра Dotnet там было важный момент, я курировавший;

Обратите внимание, что я предоставил дополнительный параметр веб-команде dnx, чтобы сообщить ей, чтобы она отображалась на 0.0.0.0 (а не на локальном хосте по умолчанию). Это позволит нашему веб-приложению обслуживать запросы, поступающие из пересылки портов, предоставляемой Docker, которая по умолчанию равна 0.0.0.0.

Это довольно чертовски важно.

Решение:

var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseStartup<Startup>() 
      .UseUrls("http://0.0.0.0:5000") 
      .Build(); 

Старый код:

var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseStartup<Startup>() 
      .UseUrls("http://localhost:5000") 
      .Build(); 

Что Wery расстраивает, так как он, казалось, отработаны в Linux и окна и приложение запускалось в Докер, но никогда не получает никаких запросов. Надеюсь, что это помогает некоторым другим бедным душам там :)

+2

Можно обойтись без вызова UseUrls, установив переменную окружения в файле docker: ENV ASPNETCORE_URLS = "http://0.0.0.0:5000" –

+1

который также может быть указан как http: // *: 5000, просто FYI – DerrickF

0

Вы можете найти полезную информацию для строить пользовательские изображения с ASP.NET Ядра и Докер на здесь: https://hahoangv.wordpress.com/2016/05/23/asp-net-core-run-in-docker/

Dockerfile:

FROM microsoft/dotnet:1.0.0-preview2-sdk 

# Set environment variables 
ENV ASPNETCORE_URLS="http://*:5000" 
ENV ASPNETCORE_ENVIRONMENT="Development" 

# Copy files to app directory 
COPY . /app 

# Set working directory 
WORKDIR /app 

# Restore NuGet packages 
RUN ["dotnet", "restore"] 

# Open up port 
EXPOSE 5000 

# Run the app 
ENTRYPOINT ["dotnet", "run"] 

и файл Program.cs:

public static void Main(string[] args) 
     { 
      // Get environment variables 
      var config = new ConfigurationBuilder() 
       .AddEnvironmentVariables(&quot;&quot;) 
       .Build(); 
      // You need to add these lines for accessing outside of Docker 
      var url = config["ASPNETCORE_URLS"] ?? "http://*:5000"; 
      var env = config["ASPNETCORE_ENVIRONMENT"] ?? "Development"; 

      var host = new WebHostBuilder() 
       .UseKestrel() 
       .UseUrls(url) 
       .UseEnvironment(env) 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

      host.Run(); 
     } 

Надеется, что это поможет!

Смежные вопросы