Бета-версия 8 ASP.NET 5.0 в Docker не запускается

Я запускал веб-сайт с помощью ASP.NET 5.0 beta 7 в контейнере Docker, используя официальный образ Docker — https://github.com/aspnet/aspnet-docker, который работал нормально.

Недавно я обновил свой проект до бета-версии 8 и изменил Dockerfile, чтобы использовать бета-версию 8 образа Docker. Все работает нормально, когда я запускаю его локально на своем компьютере с Windows, независимо от того, использую ли я Visual Studio для запуска проекта с помощью IIS Express или запускаю его с помощью Kestrel.

Однако, когда я отправляю его на свой сервер Dokku, он, похоже, не запускается должным образом. Я не получаю никаких ошибок из вывода контейнера, но у меня есть файл ПРОВЕРОК, который Dokku использует для проверки запуска веб-сервера, и это не удается (указывает на то, что он не запустился должным образом или не слушает, как должно быть) . Я попытался удалить ПРОВЕРКИ, и я также не могу подключиться к нему - я получаю сообщение о плохом шлюзе от nginx.

Я не знаю, почему это происходит, потому что, когда я нажимаю на Dokku, я получаю следующий ответ:

...
remote: [1G-----> Attempt 5/5 Waiting for 10 seconds ...[K
remote: [1G       CHECKS expected result:[K
remote: [1G       http://localhost/ => "My Website"[K

remote: Could not start due to 1 failed checks.[K
remote: [1G !    [K
remote: [1Gcurl: (7) Failed to connect to 172.17.2.14 port 5000: Connection     refused[K
remote: [1G !    Check attempt 5/5 failed.[K
remote: [1G=====> mywebsite container output:[K
remote: [1G       info    :     [Microsoft.Framework.DependencyInjection.DataProtectionServices] User profile is     available. Using '/root/.local/share/ASP.NET/DataProtection-Keys' as key repository; keys will not be encrypted at rest.[K

remote: [1G       Hosting environment: Production[K
remote: [1G       Now listening on: http://localhost:5000[K
remote: [1G       Application started. Press Ctrl+C to shut down.[K
remote: [1G=====> end mywebsite container output[K`
...

Это кажется странным, потому что похоже, что он запускается, но после того, как проверки не удались. Как я уже сказал, удаление проверок означает, что он успешно развернут, но тогда я не могу к нему подключиться.

Мой Dockerfile:

FROM microsoft/aspnet:1.0.0-beta8

# Install NPM
RUN apt-get update && apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup | bash -
RUN apt-get install -y nodejs

# Install Gulp
RUN npm install -g gulp

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

WORKDIR ./src/mywebsite

RUN ["npm", "install"]
RUN ["gulp", "min"]

EXPOSE 5000
ENTRYPOINT dnx kestrel

person user882807    schedule 01.11.2015    source источник


Ответы (1)


Я столкнулся с аналогичной проблемой, когда я не мог получить доступ к своему веб-сайту ASP.NET 5 beta 8, работающему в контейнере Docker в Windows, я получал то же сообщение, что и вы.

Я не уверен, что это будет та же проблема для вас, но вот как я исправил это со своей стороны. Симптомы похожи. Проблема была связана с этой строкой здесь:

Now listening on: http://localhost:5000

Интересно, что когда я сделал docker ps, он показал, что порт 5000 переадресовывался на 0.0.0.0, а не на localhost.

Решение

Я исправил это, обновив команду web в project.json, чтобы указать фактический используемый сетевой интерфейс:

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

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

Альтернативный вариант с использованием Dockerfile

Вы также можете просто обновить свою команду ENTRYPOINT в Dockerfile:

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

(Вы захотите заменить 0.0.0.0 точным интерфейсом, который предоставляет Docker).

Публикация в блоге/запись

Если вы хотите узнать больше об этом (или о том, как запустить Docker в Windows с ASP.NET 5), взгляните на статью в моем блоге здесь: http://dotnetliberty.com/index.php/2015

person armen.shimoon    schedule 01.11.2015
comment
Изменение последней строки моего Dockerfile на ENTRYPOINT dnx kestrel --server.urls http://0.0.0.0:5000 сработало, спасибо! - person user882807; 02.11.2015
comment
Эй, отлично. Рад слышать, что это помогло. - person armen.shimoon; 03.11.2015
comment
Спасибо! Мне потребовалось несколько часов и ваш пост, чтобы выяснить, почему я не могу получить доступ к пустельге в своем контейнере. - person Hannes Sachsenhofer; 19.11.2015
comment
Это также случилось со мной на Ubuntu. Добавление --server.urls http://0.0.0.0:5000 в мой проект.json, как указано выше, сработало для меня. При запуске docker обязательно укажите параметр -p 80:5000, чтобы он мог настроить переадресацию портов. - person Brandon Clapp; 30.01.2016