2015-11-28 3 views
6

Я воспользовался следующим руководством: Running ASP.NET 5 applications in Linux Containers with Docker, и я не могу заставить это работать на моем ПК с ОС Windows или Linux. Моя dockerfile выглядит следующим образом:Не удается запустить asp.net 5 из docker

FROM microsoft/aspnet 

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

EXPOSE 5000/tcp 
ENTRYPOINT ["dnx", "-p", "project.json", "web"] 

Я побежал docker build -t myapp ., а затем docker run -d -p 80:5000 myapp он говорит, что это работает, но я не могу открыть веб-сайт в браузере. Я знаю, что в Windows вы должны найти ip-адрес, с которым работает фактическая виртуальная машина, используя docker-machine ip default, который закончился 192.168.99.100, но когда я перешел на http://192.168.99.100, я просто получил сообщение об ошибке «Эта страница недоступна». Я также пробовал различные варианты этой команды запуска docker, такие как docker run -it -p 80:5000 myapp, docker run -p 80:5000 myapp, и я также пробовал разные порты, такие как docker run -d -p 5000:5000 myapp, но ничего не работает.

Я пробовал это как на машине с Windows, так и на моем Linux-сервере, но они оба не работают.

Я могу запустить dnx web без докеров, и все работает так, как ожидалось.

+0

Вы используете виртуальный бокс или что-то в этом роде? Или это правильная установка сервера? – RubbleFord

ответ

3

Чтобы получить более полное представление о среде вашего приложения, отправьте файл project.json и бета-версию ASP.net, с которой вы работаете.

На данный момент вы можете попробовать очистить файл Dockerfile, извлекая аргументы «project.json» и «-p» из инструкции ENTRYPOINT, удалите tcp из команды EXPOSE и, наконец, укажите «-server.urls» "аргумент в инструкции Entrypoint так, что он использует 0.0.0.0 вместо локального хоста по умолчанию следующим образом:

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

EXPOSE 5000 

ENTRYPOINT ["dnx", "web", "--server.urls"] 

в качестве альтернативы, вы можете попробовать сбросив команду вообще разоблачать и подвергать Docker порт, 5000, в инструкции Entrypoint следующим образом:

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:500"] 

В любом случае вы бы затем построить свой контейнер и запустить его, используя нечто вроде следующего:

$ docker run -it -p 80:5000 myapp 
+0

Интересно, что я использую образец проекта из asp.net и используя руководство, связанное непосредственно со своей страницы докеров, и все же оно не работает. Можете ли вы добавить объяснение, почему это работает, и, возможно, почему то, что они предоставляют, не работает? – socketman

+0

@socketman руководство связано с января, которое выглядит как бета2. Еще 6 бета были выпущены с тех пор, и в этом месяце, наконец, rc1. Лоты изменились :) –

6

Взгляните на мой ответ здесь: ASP.NET 5.0 beta 8 in Docker doesn't start

По существу, Docker является пересылка запросов к контейнеру на 0.0.0.0 сетевой интерфейс, но Kestrel прослушивает только localhost.

Так что да, запросы передаются в ваш контейнер докеров, но они не принимаются веб-сервером Kestrel. По этой причине, вы должны переопределить server.urls собственность как другие выложили:

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"] 

Затем вы должны увидеть:

Now listening on: http://0.0.0.0:5000 

при запуске вашего контейнера. Вы также можете быстро выполнить команду docker ps, чтобы убедиться, что 0.0.0.0 - это фактически сетевой интерфейс, на который Docker пересылает запросы.

Я также немного написал о том, как получить ASP.NET 5 работает на Docker в Windows - это немного больше связано с тем, что Docker не только перенаправляет запросы в контейнер, но мы должны заставить VirtualBox передавать запросы на виртуальную машину Docker boot2docker (обычно это называется default в Virtual Box) до того, как Docker может передать их нашему контейнеру.

сообщение здесь: http://dotnetliberty.com/index.php/2015/10/25/asp-net-5-running-in-docker-on-windows/

1

Вы можете найти работу, шаг за шагом учебник для Докер и ASP.NET ядра RC1 здесь: https://www.sesispla.net/blog/language/en/2015/12/recipe-asp-net-5-net-core-to-the-docker-container/

Хитрая часть, вероятно, вам не хватает, чтобы измените команду projects.json следующим образом:

"commands": { 
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000" 
    }, 

По умолчанию, пустельга принимает только LOCALHOST соединения ... С этим изменением вы обеспечить соединение с любого источника.

2

Для тех, у кого есть эта проблема сейчас в RC2, команд больше не существует. Вы должны обновить Program.cs, связав его .UseUrls («http://0.0.0.0:5000»). Вы также можете изменить с 5000 на любой желаемый порт.

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .UseUrls("http://0.0.0.0:5000") 
      .Build(); 

     host.Run(); 
    } 
} 
Смежные вопросы