Установите unixodbc-dev для веб-приложения Flask в службе приложений Azure - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь развернуть веб-приложение Flask в службе приложений Azure. Это приложение использует pyodbc для подключения к mssql; однако при развертывании приложения я получаю эту ошибку

ImportError: libodbc.so.2: невозможно открыть общий объектный файл: нет такого файл или каталог

Я узнал, что могу решить эту проблему, установив unixodbc / unixodbc-dev со следующей строкой:

sudo apt-get install unixodbc-dev

Я попытался сделать это вручную, получив доступ к SSH в Куду; однако проблема все еще сохраняется.

Я использую локальный репозиторий и отправляю код с помощью git в Azure. Когда я получаю эту ошибку, я не могу получить доступ к консоли из Kudu, поэтому мне пришлось закомментировать код и нажать снова Затем я попытался установить этот пакет вручную, выполнив apt-get install unixodbc-dev (потому что sudo не распознан), и он работает хорошо. Затем я снова нажал код с pyodbc, и та же самая ошибка появляется. Я думаю, что пакеты стираются каждый раз, когда я делаю это, так как я обнаружил, что некоторые папки, созданные этими пакетами, были удалены после действия push.

Я всегда получаю следующую ошибку:

Lines from the Log Stream

1 Ответ

0 голосов
/ 17 января 2019

Согласно вашему описанию, вы использовали Azure WebApp для Linux, основанный на Docker. Таким образом, любые изменения, которые вы сделали в контейнере, будут записаны в container layer, который будет удален при удалении контейнера (включая операцию остановки / перезапуска), как официальный документ Docker Об изображениях, контейнерах и драйверах хранения сказано как ниже.

Изображения и слои

Когда вы создаете новый контейнер, вы добавляете новый записываемый слой поверх нижележащих слоев. Этот слой часто называют «контейнерным слоем» . Все изменения, внесенные в работающий контейнер, такие как запись новых файлов, изменение существующих файлов и удаление файлов, записываются в этот тонкий слой контейнера для записи.

Контейнер и слои

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

Поэтому, если вы хотите сохранить свои изменения в работающем контейнере, вы должны зафиксировать эти изменения, чтобы создать новый образ с помощью команды docker commit. Или в вашем сценарии для установки необходимых пакетов, вы можете следовать документам Azure SSH support for Azure App Service on Linux и Use a custom Docker image for Web App for Containers, чтобы добавить эти команды, как показано ниже, в ваш файл Docker, чтобы создать образ для отправки и разверните его в Azure WebApp для Linux.

# Add unixodbc support
RUN apt-get update \
        && apt-get install -y --no-install-recommends unixodbc-dev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...