У меня возникли проблемы с веб-приложением 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).
Спасибо за помощь, но я смог решить проблему.






Вот несколько возможных сценариев.
Брандмауэр: ваше приложение недоступно по вашему IP. Проверьте, разрешен ли входящий трафик с публичных адресов.
Хост: попробуйте запустить приложение на адресе 127.0.0.1 вместо 0.0.0.0.
Порт: в сети проверьте правила для входящего трафика и откройте порт 5000. По умолчанию Azure блокирует все порты, кроме 22, 80, 443.
Это несколько вещей, которые вы можете попробовать на основе предоставленной вами информации, хотя это может быть и что-то еще.
Спасибо, но я изменил вопросы после некоторой отладки. Теперь я столкнулся с другой проблемой: сервер отказывается запускаться, поскольку не обнаруживает успешных пингов на порту 5000.
Это ошибка приложения (ошибка вашего кода), проверьте логи.
Контейнер Docker (изображение) отлично работает локально на моей стороне.
Я успешно развернул свой контейнер 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 будет автоматически развертываться каждый раз, когда в базу кода вносится изменение. Это еще больше упрощает рабочий процесс разработки и развертывания.
Отвечает ли это на ваш вопрос? Как открыть порт 3000 с помощью контейнера веб-приложения Azure?