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

У меня возникли проблемы с веб-приложением Python Flask при его развертывании в Azure. Я следовал документации и настроил Dockerfile, но столкнулся с проблемами при попытке доступа к развернутому приложению. Ниже приведены соответствующие детали:

Докерфайл:

# Use the Azure Web App Python base image
FROM python:3.10

# Set the working directory in the container
WORKDIR /app

# Install FFmpeg
RUN apt-get update && apt-get install -y ffmpeg

# Upgrade pip to the latest version
RUN pip install --no-cache-dir --upgrade pip

# Copy the requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy the Flask app code into the container
COPY . .

# Expose the port your Flask app runs on (usually 5000)
EXPOSE 5000

# Define the command to run your Flask app
CMD ["python", "application.py"]

Соответствующая часть application.py:

if __name__ == "__main__":
    application.run(host = "0.0.0.0", debug=True)

Журнал потока:

...
2023-10-09T00:27:21  Welcome, you are now connected to log-streaming service.
Starting Log Tail -n 10 of existing logs ----/home/LogFiles/__lastCheckTime.txt  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/__lastCheckTime.txt)10/09/2023 00:08:05/home/LogFiles/kudu/trace/6335909c4eec-d1c787cf-5978-4748-afeb-2b0b5b9c5589.txt  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/kudu/trace/6335909c4eec-d1c787cf-5978-4748-afeb-2b0b5b9c5589.txt)
2023-10-09T00:27:16  Startup Request, url: /api/deployments/?$orderby=ReceivedTime%20desc&$top=20&api-version=2022-03-01, method: GET, type: request, pid: 87,1,17, ScmType: None/home/LogFiles/kudu/trace/919d9d74f6c7-77f73535-a8c4-48e4-b86b-073c82a6b091.txt  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/kudu/trace/919d9d74f6c7-77f73535-a8c4-48e4-b86b-073c82a6b091.txt)
2023-10-08T21:13:48  Startup Request, url: /api/deployments/?$orderby=ReceivedTime%20desc&$top=20&api-version=2022-03-01, method: GET, type: request, pid: 86,1,5, ScmType: None
/home/LogFiles/kudu/trace/f0fe9017da97-288a89c3-1a7d-4301-9bae-5383548afdae.txt  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/kudu/trace/f0fe9017da97-288a89c3-1a7d-4301-9bae-5383548afdae.txt)
2023-10-08T21:15:20  Startup Request, url: /api/logstream/, method: GET, type: request, pid: 93,1,5, ScmType: None/home/LogFiles/2023_10_08_lw1sdlwk00003N_default_docker.log  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/2023_10_08_lw1sdlwk00003N_default_docker.log)
2023-10-08T21:18:00.727101619Z exec /usr/local/bin/python: exec format error
/home/LogFiles/2023_10_08_lw1sdlwk00003N_docker.log  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/2023_10_08_lw1sdlwk00003N_docker.log)
2023-10-08T23:59:57.351Z INFO  - 5b6cc8d80836 Extracting 34MB / 182MB
2023-10-08T23:59:57.734Z INFO  - 5b6cc8d80836 Extracting 37MB / 182MB
2023-10-08T23:59:57.894Z INFO  - 5b6cc8d80836 Extracting 38MB / 182MB
2023-10-08T23:59:58.165Z INFO  - 5b6cc8d80836 Extracting 40MB / 182MB
2023-10-08T23:59:58.327Z INFO  - 5b6cc8d80836 Extracting 41MB / 182MB
2023-10-08T23:59:58.836Z INFO  - 5b6cc8d80836 Extracting 44MB / 182MB
2023-10-08T23:59:58.938Z INFO  - 5b6cc8d80836 Extracting 44MB / 182MB
2023-10-08T23:59:59.057Z INFO  - 5b6cc8d80836 Extracting 45MB / 182MB
2023-10-08T23:59:59.627Z INFO  - 5b6cc8d80836 Extracting 47MB / 182MB
2023-10-08T23:59:59.789Z INFO  - 5b6cc8d80836 Extracting 48MB / 182MB/home/LogFiles/2023_10_09_lw1sdlwk00003N_default_docker.log  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/2023_10_09_lw1sdlwk00003N_default_docker.log)
2023-10-09T00:00:42.275260288Z exec /usr/local/bin/python: exec format error
2023-10-09T00:03:06.223995155Z exec /usr/local/bin/python: exec format error
2023-10-09T00:05:39.529100248Z exec /usr/local/bin/python: exec format error
2023-10-09T00:08:06.612760325Z exec /usr/local/bin/python: exec format error
/home/LogFiles/2023_10_09_lw1sdlwk00003N_docker.log  (https://talktotexts.scm.azurewebsites.net/api/vfs/LogFiles/2023_10_09_lw1sdlwk00003N_docker.log)
2023-10-09T00:08:05.805Z INFO  - Pull Image successful, Time taken: 0 Minutes and 0 Seconds
2023-10-09T00:08:05.889Z INFO  - Starting container for site
2023-10-09T00:08:05.890Z INFO  - docker run -d --expose=5000 --name talktotexts_0_0932adae -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=talktotexts -e WEBSITE_AUTH_ENABLED=False -e PORT=5000 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=talktotexts.azurewebsites.net -e WEBSITE_INSTANCE_ID=6112ee766f20dedb21a683a179ca760b2a33a00f96b3c2626bbc09e4e42eace6 -e WEBSITE_USE_DIAGNOSTIC_SERVER=False talktotext.azurecr.io/talktotext:latest
2023-10-09T00:08:05.891Z INFO  - Logging is not enabled for this container.Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.
2023-10-09T00:08:07.164Z INFO  - Initiating warmup request to container talktotexts_0_0932adae for site talktotexts
2023-10-09T00:08:22.440Z ERROR - Container talktotexts_0_0932adae for site talktotexts has exited, failing site start
2023-10-09T00:08:22.446Z ERROR - Container talktotexts_0_0932adae didn't respond to HTTP pings on port: 5000, failing site start. See container logs for debugging.
2023-10-09T00:08:22.454Z INFO  - Stopping site talktotexts because it failed during startup.Ending Log Tail of existing logs ---Starting Live Log Stream ---
...

При доступе к домену своего веб-приложения Azure я получаю следующее сообщение об ошибке:

Ошибка при входе в домен:

:( Application Error
If you are the application administrator, you can access the diagnostic resources.

Как сделать приложение Flask доступным из Интернета при его развертывании в Azure? Буду очень признателен за любую информацию об ошибках в моих журналах.

Кроме того, обратите внимание, что мой образ Docker помещается в реестр контейнеров Azure (ACR).

Отвечает ли это на ваш вопрос? Как открыть порт 3000 с помощью контейнера веб-приложения Azure?

CSharpRocks 09.10.2023 12:24

Спасибо за помощь, но я смог решить проблему.

Giridhar Nair 10.10.2023 19:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот несколько возможных сценариев.

  • Брандмауэр: ваше приложение недоступно по вашему IP. Проверьте, разрешен ли входящий трафик с публичных адресов.

  • Хост: попробуйте запустить приложение на адресе 127.0.0.1 вместо 0.0.0.0.

  • Порт: в сети проверьте правила для входящего трафика и откройте порт 5000. По умолчанию Azure блокирует все порты, кроме 22, 80, 443.

Это несколько вещей, которые вы можете попробовать на основе предоставленной вами информации, хотя это может быть и что-то еще.

Спасибо, но я изменил вопросы после некоторой отладки. Теперь я столкнулся с другой проблемой: сервер отказывается запускаться, поскольку не обнаруживает успешных пингов на порту 5000.

Giridhar Nair 09.10.2023 02:10

Это ошибка приложения (ошибка вашего кода), проверьте логи.

ScriptKiddieOnAComputer 09.10.2023 02:26

Контейнер Docker (изображение) отлично работает локально на моей стороне.

Giridhar Nair 09.10.2023 02:44
Ответ принят как подходящий

Я успешно развернул свой контейнер Docker в приложениях-контейнерах Azure, используя ценные рекомендации, представленные в этой информативной статье:

Ссылка на статью

Одним из ключевых аспектов статьи, который значительно облегчил мне процесс развертывания, было использование команды az containerapp up. Эта единственная команда упростила весь процесс развертывания, сделав его простым и эффективным.

az containerapp up \
  -g flask-aca-rg \
  -n flask-aca-app \
  --ingress external \
  --target-port 5000 \
  --source .

Позвольте мне рассказать, что делает эта команда:

  • Создание группы ресурсов: создается группа ресурсов Azure, которая служит организационным объектом для управления ресурсами во время развертывания.

  • Предоставление среды приложения-контейнера. Эта команда настраивает среду приложения-контейнера и рабочую область Log Analytics в указанной группе ресурсов.

  • Сборка образа Docker: автоматизирует процесс создания образа Docker, используя локальный файл Dockerfile.

  • Отправка изображения в реестр контейнеров Azure. Команда создает реестр в реестре контейнеров Azure, а затем отправляет образ Docker в этот реестр.

  • Создание приложения-контейнера: оно настраивает приложение-контейнер с отправленным образом, обеспечивая внешний доступ к указанному порту.

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

И статья, и команда az containerapp up помогли упростить процесс развертывания, позволив мне сосредоточиться на разработке приложения Flask. Если вы планируете развернуть приложение Flask в приложениях-контейнерах Azure, я настоятельно рекомендую обратиться к этой статье за ​​подробным пошаговым руководством. Кроме того, я интегрировал CI/CD через GitHub Actions, чтобы автоматизировать процесс развертывания, гарантируя, что мой контейнер Docker будет автоматически развертываться каждый раз, когда в базу кода вносится изменение. Это еще больше упрощает рабочий процесс разработки и развертывания.

Другие вопросы по теме