Невозможно получить доступ к образу докера, запущенному в веб-приложении Azure для контейнеров

Я создал образ докера и добавил его в реестр контейнеров Azure. Затем я развернул его в веб-приложении, но у меня возникли проблемы с доступом к сайту. Когда я просматриваю его, он загружается в течение долгого времени (минут), а затем получаю сообщение об ошибке 503: служба недоступна.

Я подумал, что это может быть проблема с портом, поскольку в моем файле докеров есть:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 15973
EXPOSE 44369

И добавили в настройки приложения следующую пару ключ / значение: WEBSITES_PORT: 15973, но по-прежнему ничего не возвращает.

Я думал, что вернусь к основам и воспользуюсь быстрым стартом из веб-приложения для контейнеров (appsvc/sample-hello-world:latest), но он делает то же самое, не может запустить приложение.

В чем может быть проблема? Должно ли быть так просто, как указать на изображение, чтобы запустить и запустить веб-сайт? Есть ли еще один общедоступный шаблон, который я могу использовать в качестве базового изображения, чтобы увидеть, как работает контейнер?


Обновлять

Итак, я попытался запустить изображение локально, предложенное @Charles. Когда он запускается, он определенно работает так, как будто я не передаю переменные среды (например, строку подключения), тогда я получаю соответствующее сообщение об ошибке.

Проблема, возникающая локально, заключается в том, что после ее запуска я не знаю, как она раскрывается. Я пробовал http://localhost:15973, http://localhost:44369, http://localhost/ и попытался передать -p 8080:80, а затем http://localhost:8080, но они не отвечают.

Ответ запуска изображения:

Среда хостинга: Производство

Корневой путь содержимого: / app

Теперь слушаем: http://[::]:80

Я думаю, что проблема заключается в том, что он также размещен в Azure, запросы не маршрутизируются через образ.

Что мне нужно сделать, чтобы вызвать api в образе?


person ADringer    schedule 03.09.2018    source источник
comment
Если ответ окажется полезным, вы можете принять его для других людей, которые его ищут.   -  person Charles Xu    schedule 19.09.2018


Ответы (1)


Для решения вашей проблемы я пробую тестировать веб-приложение Azure для контейнеров и следую инструкциям в Развернуть веб-приложение Docker / Go в веб-приложении для контейнеров. Это работает хорошо.

Итак, я предлагаю вам сначала протестировать свой образ на локальном компьютере. Если он может работать так, как вы хотите, на вашем локальном компьютере.

person Charles Xu    schedule 04.09.2018
comment
Спасибо за ответ, я обновил свой вопрос на основе того, что вы сказали. Я немного отклоняюсь от темы моего первоначального вопроса, но был бы признателен за вашу помощь! - person ADringer; 04.09.2018
comment
@ADringer Порт, который вы должны открыть, - это тот порт, который вы использовали в приложении. Например, если вы используете порт 1234 для своего приложения, вы можете выставить как targetPort:1234. TargetPort - это порт хост-узла, а порт 1234 - это порт, который вы использовали в контейнере для своего приложения. - person Charles Xu; 05.09.2018
comment
так что при выполнении docker run я бы установил -p 15973:80? Как это работает с приложениями Azure? Я установил WEBSITES_PORT: 15973, но этого не произошло. Обратите внимание, что порт 15973 отмечен как открытый в моем файле докеров. - person ADringer; 05.09.2018
comment
@ADringer На самом деле вы должны убедиться, что порт 15973 используется вашим приложением. Например, если вы используете порт 15973 для своего приложения и хотите получить доступ к своему приложению из Интернета через порт 80, вы можете установить его с помощью команды docker run -p 80:15973 image. - person Charles Xu; 05.09.2018
comment
@ADringer Вы узнали кое-что о привязке портов контейнера к хосту из здесь. - person Charles Xu; 05.09.2018
comment
Я получил немного больше информации благодаря вашему комментарию. Если я запускаю docker run -p 15973:80 локально, я могу получить к нему доступ локально по адресу 127.0.0.1:15973. Но как мне раскрыть это в Azure? Глядя на журналы, кажется, что при запуске образа используется случайный порт: docker run -d -p 27253:15973. Разве первый порт не должен быть 80/443? - person ADringer; 05.09.2018
comment
Если вы выполните команду docker run -p 15973:80, и тогда вы сможете получить к ней доступ, как вы говорите. Это означает, что вы должны открыть порт в Dockerfile и создать образ. Затем вы можете снова попробовать веб-приложение для контейнера с изображением. - person Charles Xu; 06.09.2018