Udostępnij za pośrednictwem


Samouczek: tworzenie i wdrażanie aplikacji internetowej w języku Python za pomocą usług Azure Container Apps i PostgreSQL

Ten artykuł jest częścią serii samouczków dotyczących konteneryzowania i wdrażania aplikacji internetowej w języku Python w celu azure Container Apps. Usługa Container Apps umożliwia wdrażanie konteneryzowanych aplikacji bez zarządzania złożoną infrastrukturą.

W tym samouczku nauczysz się:

  • Konteneryzowanie przykładowej aplikacji internetowej w języku Python (Django lub Flask), tworząc obraz kontenera w chmurze.
  • Wdróż obraz kontenera w usłudze Azure Container Apps.
  • Zdefiniuj zmienne środowiskowe, które umożliwiają aplikacji kontenera połączenie z wystąpieniem Azure Database for PostgreSQL - serwer elastyczny. W tym wystąpieniu przykładowa aplikacja przechowuje dane.

Na poniższym diagramie przedstawiono zadania opisane w tym samouczku: kompilowanie i wdrażanie obrazu kontenera.

Diagram usług związanych z wdrażaniem aplikacji języka Python w usłudze Azure Container Apps z wyróżnionymi częściami dotyczącymi ręcznego kompilowania obrazu.

Warunki wstępne

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto .

Polecenia interfejsu wiersza polecenia platformy Azure można uruchamiać w usłudze Azure Cloud Shell lub na stacji roboczej z zainstalowanym Azure CLI.

Jeśli korzystasz lokalnie, wykonaj następujące kroki, aby zalogować się i zainstalować niezbędne moduły na potrzeby tego samouczka:

  1. Zaloguj się do platformy Azure i w razie potrzeby uwierzytelnij się:

    az login
    
  2. Upewnij się, że używasz najnowszej wersji interfejsu wiersza polecenia platformy Azure:

    az upgrade
    
  3. Zainstaluj lub uaktualnij rozszerzenia containerapp i rdbms-connect dla Azure CLI, używając polecenia az extension add:

    az extension add --name containerapp --upgrade
    az extension add --name rdbms-connect --upgrade
    

    Uwaga

    Aby wyświetlić listę rozszerzeń zainstalowanych w systemie, możesz użyć polecenia az extension list. Na przykład:

    az extension list --query [].name --output tsv
    

Pobieranie przykładowej aplikacji

Forkowanie i klonowanie przykładowego kodu do środowiska deweloperskiego.

  1. Przejdź do repozytorium GitHub przykładowej aplikacji (Django lub Flask) i wybierz pozycję Rozwidlenie.

    Wykonaj kroki, aby sforkować repozytorium na swoim koncie GitHub. Możesz również pobrać repozytorium kodu bezpośrednio na komputer lokalny bez forka ani konta GitHub. Jeśli jednak używasz metody pobierania, nie będzie można skonfigurować ciągłej integracji i ciągłego dostarczania (CI/CD) w następnym samouczku z tej serii.

  2. Użyj polecenia git clone, aby sklonować rozwidlenie repozytorium do folderu python-container:

    # Django
    git clone https://github.com/$USERNAME/msdocs-python-django-azure-container-apps.git python-container
    
    # Flask
    # git clone https://github.com/$USERNAME/msdocs-python-flask-azure-container-apps.git python-container
    
  3. Zmień katalog:

    cd python-container
    

Tworzenie obrazu kontenera na podstawie kodu aplikacji internetowej

Po wykonaniu tych kroków będziesz mieć wystąpienie usługi Azure Container Registry zawierające obraz kontenera platformy Docker skompilowany na podstawie przykładowego kodu.

  1. Utwórz grupę zasobów za pomocą polecenia az group create.

    az group create \
        --name pythoncontainer-rg \
        --location <location>
    

    Zastąp <lokalizacji> jednym z wartości lokalizacji platformy Azure Name z danych wyjściowych polecenia az account list-locations -o table.

  2. Utwórz rejestr kontenerów przy użyciu polecenia az acr create:

    az acr create \
        --resource-group pythoncontainer-rg \
        --name <registry-name> \
        --sku Basic \
        --admin-enabled
    

    Nazwa używana dla <nazwa rejestru> musi być unikatowa na platformie Azure i musi zawierać od 5 do 50 znaków alfanumerycznych.

  3. Zaloguj się do rejestru przy użyciu polecenia az acr login:

    az acr login --name <registry-name>
    

    Polecenie dodaje "azurecr.io" do nazwy, aby utworzyć w pełni kwalifikowaną nazwę rejestru. Jeśli logowanie zakończy się pomyślnie, zostanie wyświetlony komunikat "Logowanie powiodło się". Jeśli uzyskujesz dostęp do rejestru z subskrypcji innej niż ta, w której utworzono rejestr, użyj przełącznika --suffix.

    Jeśli logowanie się nie powiedzie, upewnij się, że serwis Docker jest uruchomiony w systemie.

  4. Skompiluj obraz przy użyciu polecenia az acr build:

    az acr build \
        --registry <registry-name> \
        --resource-group pythoncontainer-rg \
        --image pythoncontainer:latest .
    

    Te zagadnienia mają zastosowanie:

    • Kropka (.) na końcu polecenia wskazuje lokalizację kodu źródłowego do skompilowania. Jeśli nie uruchamiasz tego polecenia w katalogu głównym przykładowej aplikacji, określ ścieżkę do kodu.

    • Jeśli używasz polecenia w usłudze Azure Cloud Shell, użyj git clone, aby najpierw ściągnąć repozytorium do środowiska usługi Cloud Shell. Następnie zmień katalog na katalog główny projektu, aby kropka (.) została prawidłowo zinterpretowana.

    • Jeśli pominiesz -t opcję (taką samą jak --image), polecenie spowoduje kolejkowanie kompilacji kontekstu lokalnego bez wypychania jej do rejestru. Kompilowanie bez wypychania może być przydatne, aby sprawdzić, czy kompilacje obrazu.

  5. Upewnij się, że obraz kontenera został utworzony przy użyciu polecenia az acr repository list:

    az acr repository list --name <registry-name>
    

Uwaga

Kroki opisane w tej sekcji umożliwiają utworzenie rejestru kontenerów w warstwie usługi Podstawowa. Ta warstwa jest zoptymalizowana pod kątem kosztów z zestawem funkcji i przepływnością przeznaczoną dla scenariuszy deweloperskich i jest odpowiednia dla wymagań tego samouczka. W scenariuszach produkcyjnych najprawdopodobniej użyjesz warstwy usługi Standardowa lub Premium. Te warstwy zapewniają ulepszone poziomy magazynowania i przepływności.

Aby dowiedzieć się więcej, zobacz poziomy usługi Azure Container Registry. Aby uzyskać informacje o cenach, zobacz cennik usługi Azure Container Registry.

Tworzenie wystąpienia serwera elastycznego PostgreSQL

Przykładowa aplikacja (Django lub Flask) przechowuje dane przeglądu restauracji w bazie danych PostgreSQL. W tych krokach utworzysz serwer, który będzie zawierać bazę danych.

  1. Użyj polecenia az postgres flexible-server create, aby utworzyć serwer PostgreSQL na platformie Azure. Nie jest rzadkością, aby to polecenie było uruchamiane przez kilka minut przed jego zakończeniem.

    az postgres flexible-server create \
       --resource-group pythoncontainer-rg \
       --name <postgres-server-name>  \
       --location <location> \
       --admin-user demoadmin \
       --admin-password <admin-password> \
       --active-directory-auth Enabled \
       --tier burstable \
       --sku-name standard_b1ms \
       --public-access 0.0.0.0 
    

    Użyj następujących wartości:

    • pythoncontainer-rg: nazwa grupy zasobów, której używa ten samouczek. Jeśli użyto innej nazwy, zmień tę wartość.

    • <nazwa serwera postgres-server>: nazwa serwera bazy danych PostgreSQL. Ta nazwa musi być unikatowa na całej platformie Azure. Punkt końcowy serwera jest https://<postgres-server-name>.postgres.database.azure.com. Dozwolone znaki to AZ, 0 do 9i łącznika (-).

    • <lokalizacji>: Użyj tej samej lokalizacji, której używałeś dla aplikacji internetowej. <lokalizacji> jest jedną z wartości lokalizacji Azure Name z danych wyjściowych polecenia az account list-locations -o table.

    • < > admin-username : nazwa użytkownika konta administratora. Nie można go azure_superuser, admin, administrator, root, guestani public. W tym samouczku użyj demoadmin.

    • <hasło administratora>: hasło użytkownika administratora. Musi zawierać od 8 do 128 znaków z trzech z następujących kategorii: wielkie litery angielskie, małe litery angielskie, cyfry i znaki inne niż alfanumeryczne.

      Ważne

      Podczas tworzenia nazw użytkowników lub haseł nie używaj znaku dolara ($). Później podczas tworzenia zmiennych środowiskowych przy użyciu tych wartości ten znak ma specjalne znaczenie w kontenerze systemu Linux używanym do uruchamiania aplikacji języka Python.

    • --active-directory-auth: ta wartość określa, czy na serwerze PostgreSQL jest włączone uwierzytelnianie firmy Microsoft Entra. Ustaw go na wartość Enabled.

    • --sku-name: nazwa warstwy cenowej i konfiguracji obliczeniowej; na przykład Standard_B1ms. Aby uzyskać więcej informacji, zobacz Cennik usługi Azure Database for PostgreSQL. Aby wyświetlić listę dostępnych warstw, użyj az postgres flexible-server list-skus --location <location>.

    • --public-access: użyj 0.0.0.0. Umożliwia ona publiczny dostęp do serwera z dowolnej usługi platformy Azure, takiej jak Container Apps.

    Uwaga

    Jeśli planujesz pracować z serwerem PostgreSQL z lokalnej stacji roboczej za pomocą narzędzi, musisz dodać regułę zapory dla adresu IP swojej stacji roboczej, korzystając z polecenia az postgres flexible-server firewall-rule create.

  2. Użyj polecenia az ad signed-in-user show, aby uzyskać identyfikator obiektu dla swojego konta użytkownika. Użyj tego identyfikatora w następnym poleceniu.

    az ad signed-in-user show --query id --output tsv
    
  3. Użyj polecenia az postgres flexible-server ad-admin create, aby dodać swoje konto użytkownika jako administratora Microsoft Entra na serwerze PostgreSQL.

    az postgres flexible-server ad-admin create \
       --resource-group pythoncontainer-rg \
       --server-name <postgres-server-name>  \
       --display-name <your-email-address> \
       --object-id <your-account-object-id>
    

    Dla identyfikatora obiektu konta użyj wartości, która została uzyskana w poprzednim kroku.

Uwaga

Kroki opisane w tej sekcji umożliwiają utworzenie serwera PostgreSQL z pojedynczym vCore i ograniczoną pamięcią w warstwie cenowej Burstable. Warstwa Burstable to tańsza opcja dla obciążeń, które nie potrzebują pełnego użycia CPU w sposób ciągły i odpowiada wymaganiom tego samouczka. W przypadku obciążeń produkcyjnych można przeprowadzić uaktualnienie do poziomu cenowego Ogólnego przeznaczenia lub Zoptymalizowanego pod kątem pamięci. Te warstwy zapewniają większą wydajność, ale zwiększają koszty.

Aby dowiedzieć się więcej, zobacz Opcje obliczeń w usłudze Azure Database for PostgreSQL — serwer elastyczny. Aby uzyskać informacje o cenach, zobacz cennik usługi Azure Database for PostgreSQL.

Tworzenie bazy danych na serwerze

Na tym etapie masz serwer PostgreSQL. W tej sekcji utworzysz bazę danych na serwerze.

Użyj polecenia az postgres flexible-server db create, aby utworzyć bazę danych nazwaną restaurants_reviews:

az postgres flexible-server db create \
   --resource-group pythoncontainer-rg \
   --server-name <postgres-server-name> \
   --database-name restaurants_reviews

Użyj następujących wartości:

  • pythoncontainer-rg: Używana w tym samouczku nazwa grupy zasobów. Jeśli użyto innej nazwy, zmień tę wartość.
  • <postgres-server-name>: nazwa serwera PostgreSQL.

Możesz również użyć polecenia az postgres flexible-server connect , aby nawiązać połączenie z bazą danych, a następnie pracować z poleceniami psql . Podczas pracy z psql często łatwiej jest używać Azure Cloud Shell, ponieważ shell zawiera wszystkie zależności.

Możesz również nawiązać połączenie z elastycznym serwerem usługi Azure Database for PostgreSQL i utworzyć bazę danych przy użyciu psql lub środowiska IDE obsługującego bazę danych PostgreSQL, na przykład Azure Data Studio. Aby uzyskać instrukcje dotyczące używania narzędzia psql, zobacz Configure the managed identity on the PostgreSQL database (Konfigurowanie tożsamości zarządzanej w bazie danych PostgreSQL) w dalszej części tego artykułu.

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika

Utwórz tożsamość zarządzaną przypisaną przez użytkownika do użycia jako tożsamość aplikacji kontenera, gdy jest ona uruchomiona na platformie Azure.

Uwaga

Aby utworzyć zarządzaną tożsamość przypisaną użytkownikowi, twoje konto musi mieć przypisaną rolę współautora tożsamości zarządzanej .

Użyj polecenia az identity create, aby utworzyć zarządzaną tożsamość przypisaną użytkownikowi.

az identity create --name my-ua-managed-id --resource-group pythoncontainer-rg

Konfigurowanie tożsamości zarządzanej w bazie danych PostgreSQL

Skonfiguruj tożsamość zarządzaną jako rolę na serwerze PostgreSQL, a następnie przyznaj jej niezbędne uprawnienia dla bazy danych restaurants_reviews. Niezależnie od tego, czy używasz interfejsu wiersza polecenia Azure, czy narzędzia psql, musisz połączyć się z serwerem Azure PostgreSQL za pomocą użytkownika skonfigurowanego jako administrator Microsoft Entra w instancji serwera. Tylko konta Microsoft Entra skonfigurowane jako administrator postgreSQL mogą konfigurować tożsamości zarządzane i inne role administratora firmy Microsoft na serwerze.

  1. Uzyskaj token dostępu dla konta platformy Azure przy użyciu polecenia az account get-access-token. Token dostępu jest używany w następnych krokach.

    az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken
    

    Zwrócony token jest długi. Ustaw jej wartość w zmiennej środowiskowej do użycia w poleceniach w następnym kroku:

    MY_ACCESS_TOKEN=<your-access-token>
    
  2. Dodaj przypisaną przez użytkownika tożsamość zarządzaną jako rolę w bazie danych na serwerze PostgreSQL, korzystając z polecenia az postgres flexible-server execute.

    az postgres flexible-server execute \
        --name <postgres-server-name> \
        --database-name postgres \
        --querytext "select * from pgaadauth_create_principal('"my-ua-managed-id"', false, false);select * from pgaadauth_list_principals(false);" \
        --admin-user <your-Azure-account-email> \
        --admin-password $MY_ACCESS_TOKEN
    

    Użyj następujących wartości:

    • Jeśli użyto innej nazwy tożsamości zarządzanej, zastąp my-ua-managed-id w poleceniu pgaadauth_create_principal nazwą tożsamości zarządzanej.

    • Dla wartości --admin-user użyj adresu e-mail konta platformy Azure.

    • Dla wartości --admin-password użyj tokenu dostępu z danych wyjściowych poprzedniego polecenia bez cudzysłowu.

    • Upewnij się, że nazwa bazy danych to postgres.

    Uwaga

    Jeśli używasz polecenia az postgres flexible-server execute na lokalnej stacji roboczej, upewnij się, że dodano regułę zapory dla adresu IP stacji roboczej. Regułę można dodać za pomocą polecenia az postgres flexible-server firewall-rule create. To samo wymaganie istnieje również dla polecenia w następnym kroku.

  3. Udziel tożsamości zarządzanej przypisanej przez użytkownika niezbędne uprawnienia do bazy danych restaurants_reviews przy użyciu następującego polecenia az postgres flexible-server execute:

    az postgres flexible-server execute \
        --name <postgres-server-name> \
        --database-name restaurants_reviews \
        --querytext "GRANT CONNECT ON DATABASE restaurants_reviews TO \"my-ua-managed-id\";GRANT USAGE ON SCHEMA public TO \"my-ua-managed-id\";GRANT CREATE ON SCHEMA public TO \"my-ua-managed-id\";GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"my-ua-managed-id\";ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO \"my-ua-managed-id\";" \
        --admin-user <your-Azure-account-email> \
        --admin-password $MY_ACCESS_TOKEN
    

    Użyj następujących wartości:

    • Jeśli użyto innej nazwy tożsamości zarządzanej, zastąp wszystkie wystąpienia my-ua-managed-id w poleceniu nazwą tożsamości zarządzanej. W łańcuchu zapytania znajduje się pięć wystąpień.

    • Dla wartości --admin-user użyj adresu e-mail konta platformy Azure.

    • Dla wartości --admin-password użyj tokenu dostępu z poprzedniego wyniku bez cudzysłowów.

    • Upewnij się, że nazwa bazy danych to restaurants_reviews.

    To polecenie interfejsu wiersza polecenia platformy Azure nawiązuje połączenie z bazą danych restaurants_reviews na serwerze i uruchamia następujące polecenia SQL:

    GRANT CONNECT ON DATABASE restaurants_reviews TO "my-ua-managed-id";
    GRANT USAGE ON SCHEMA public TO "my-ua-managed-id";
    GRANT CREATE ON SCHEMA public TO "my-ua-managed-id";
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "my-ua-managed-id";
    ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "my-ua-managed-id";
    

Wdrażanie aplikacji internetowej w usłudze Container Apps

Aplikacje kontenerów są wdrażane w środowiskach usługi Azure Container Apps , które działają jako bezpieczna granica. W poniższych krokach utworzysz środowisko i kontener wewnątrz środowiska. Następnie skonfigurujesz kontener tak, aby witryna internetowa był widoczna zewnętrznie.

Te kroki wymagają rozszerzenia Azure Container Apps .

  1. Utwórz środowisko usługi Container Apps przy użyciu polecenia az containerapp env create:

    az containerapp env create \
    --name python-container-env \
    --resource-group pythoncontainer-rg \
    --location <location>
    

    <lokalizacja> jest jedną z wartości lokalizacji Name platformy Azure uzyskanych z danych wyjściowych polecenia az account list-locations -o table.

  2. Pobierz poświadczenia logowania dla wystąpienia usługi Azure Container Registry, używając polecenia az acr credential show.

    az acr credential show -n <registry-name>
    

    Używasz nazwy użytkownika i jednego z haseł zwracanych z danych wyjściowych polecenia podczas tworzenia aplikacji kontenera w kroku 5.

  3. Użyj polecenia az identity show, aby uzyskać identyfikator klienta oraz identyfikator zasobu przypisanej przez użytkownika tożsamości zarządzanej.

    az identity show --name my-ua-managed-id --resource-group pythoncontainer-rg --query "[clientId, id]" --output tsv
    

    Wartości identyfikatora klienta (GUID) i identyfikatora zasobu są używane z danych wyjściowych polecenia podczas tworzenia aplikacji kontenera w kroku 5. Identyfikator zasobu ma następującą postać: /subscriptions/<subscription-id>/resourcegroups/pythoncontainer-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-ua-managed-id.

  4. Uruchom następujące polecenie, aby wygenerować wartość klucza tajnego:

    python -c 'import secrets; print(secrets.token_hex())'
    

    Wartość klucza tajnego służy do ustawiania zmiennej środowiskowej podczas tworzenia aplikacji kontenera w kroku 5.

    Uwaga

    Polecenie, które pokazuje ten krok, dotyczy powłoki Bash. W zależności od środowiska może być konieczne wywołanie języka Python przy użyciu python3. W systemie Windows należy ująć polecenie w parametrze -c w podwójny cudzysłów, a nie w pojedynczy cudzysłów. Może być również konieczne wywołanie języka Python przy użyciu py lub py -3, w zależności od środowiska.

  5. Utwórz aplikację kontenerową w środowisku przy użyciu polecenia az containerapp create:

    az containerapp create \
    --name python-container-app \
    --resource-group pythoncontainer-rg \
    --image <registry-name>.azurecr.io/pythoncontainer:latest \
    --environment python-container-env \
    --ingress external \
    --target-port <5000 for Flask or 8000 for Django> \
    --registry-server <registry-name>.azurecr.io \
    --registry-username <registry-username> \
    --registry-password <registry-password> \
    --user-assigned <managed-identity-resource-id> \
    --query properties.configuration.ingress.fqdn \
    --env-vars DBHOST="<postgres-server-name>" \
    DBNAME="restaurants_reviews" \
    DBUSER="my-ua-managed-id" \
    RUNNING_IN_PRODUCTION="1" \
    AZURE_CLIENT_ID="<managed-identity-client-id>" \
    AZURE_SECRET_KEY="<your-secret-key>"
    

    Pamiętaj, aby zastąpić wszystkie wartości w nawiasach kątowych tymi, których używasz w tym samouczku. Należy pamiętać, że nazwa aplikacji kontenera musi być unikatowa na platformie Azure.

    Wartość parametru --env-vars jest ciągiem składającym się z wartości rozdzielanych spacjami w formacie key="value" z następującymi wartościami:

    • DBHOST="\<postgres-server-name>"
    • DBNAME="restaurants_reviews"
    • DBUSER="my-ua-managed-id"
    • RUNNING_IN_PRODUCTION="1"
    • AZURE_CLIENT_ID="\<managed-identity-client-id>"
    • AZURE_SECRET_KEY="\<your-secret-key>"

    Wartość DBUSER to nazwa zarządzanej tożsamości przypisanej użytkownikowi.

    Wartość AZURE_CLIENT_ID to identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika. Ta wartość została uzyskana w poprzednim kroku.

    Wartość AZURE_SECRET_KEY to wartość klucza tajnego wygenerowana w poprzednim kroku.

  6. Tylko w przypadku platformy Django należy przeprowadzić migrację i utworzyć schemat bazy danych. (W przykładowej aplikacji Platformy Flask jest ona wykonywana automatycznie i można pominąć ten krok).

    Nawiąż połączenie przy użyciu polecenia az containerapp exec:

        az containerapp exec \
            --name python-container-app \
            --resource-group pythoncontainer-rg
    

    Następnie w wierszu polecenia powłoki wprowadź python manage.py migrate.

    Nie musisz migrować wersji kontenera.

  7. Przetestuj witrynę internetową.

    Wprowadzone wcześniej polecenie az containerapp create zwraca adres URL aplikacji, którego można użyć do przeglądania aplikacji. Adres URL kończy się na azurecontainerapps.io. Przejdź do adresu URL w przeglądarce. Alternatywnie możesz użyć polecenia az containerapp browse .

Oto przykład przykładowej witryny internetowej po dodaniu restauracji i dwóch recenzji.

Zrzut ekranu przedstawiający przykładową witrynę internetową utworzoną w tym samouczku.

Rozwiązywanie problemów z wdrażaniem

Zapomniałeś adresu URL aplikacji do uzyskania dostępu do witryny internetowej.

W witrynie Azure Portal:

  • Przejdź do strony Przegląd aplikacji kontenera i poszukaj adresu URL aplikacji .

W programie VS Code:

  1. Przejdź do widoku Azure (Ctrl+Shift+A) i rozwiń subskrypcję, nad którą pracujesz.
  2. Rozwiń węzeł Container Apps, rozwiń środowisko zarządzane, kliknij prawym przyciskiem myszy python-container-app, a następnie wybierz pozycję Przeglądaj. Program VS Code otwiera przeglądarkę z adresem URL aplikacji.

W Azure CLI:

  • Użyj polecenia az containerapp show -g pythoncontainer-rg -n python-container-app --query properties.configuration.ingress.fqdn.

W programie VS Code zadanie Kompilowanie obrazu na platformie Azure zwraca błąd

Jeśli zostanie wyświetlony komunikat "Błąd: nie można pobrać kontekstu. Sprawdź, czy "adres URL jest niepoprawny" w oknie danych wyjściowych programu VS Code, a następnie odśwież rejestr w rozszerzeniu Docker. Aby odświeżyć, wybierz rozszerzenie platformy Docker, przejdź do sekcji rejestrów , znajdź rejestr i wybierz go.

Jeśli ponownie uruchomisz zadanie Budowania Obrazu w usłudze Azure, sprawdź, czy rejestrator z poprzedniego uruchomienia istnieje. Jeśli tak, użyj go.

W witrynie Azure Portal podczas tworzenia aplikacji kontenera pojawia się błąd dostępu

Błąd dostępu zawierający komunikat "Nie można uzyskać dostępu do ACR '<nazwa>.azurecr.io'" występuje, gdy poświadczenia administratora w wystąpieniu Azure Container Registry są wyłączone.

Aby sprawdzić stan administratora w portalu, przejdź do wystąpienia usługi Azure Container Registry, wybierz zasób Access keys i upewnij się, że użytkownik administratora jest włączony.

Twój obraz kontenera nie pojawia się w instancji Azure Container Registry

  • Sprawdź wyniki polecenia Azure CLI lub VS Code i poszukaj komunikatów potwierdzających powodzenie.
  • Sprawdź, czy nazwa rejestru została poprawnie określona w poleceniu kompilacji za pomocą interfejsu wiersza polecenia platformy Azure lub w wierszach zadań programu VS Code.
  • Upewnij się, że poświadczenia nie wygasły. Na przykład w programie VS Code znajdź rejestr docelowy w rozszerzeniu platformy Docker i odśwież. W interfejsie wiersza polecenia platformy Azure uruchom polecenie az login.

Witryna internetowa zwraca komunikat "Nieprawidłowe żądanie (400)"

Jeśli zostanie wyświetlony błąd "Nieprawidłowe żądanie (400)", sprawdź zmienne środowiskowe bazy danych PostgreSQL przekazane do kontenera. Błąd 400 często wskazuje, że kod języka Python nie może nawiązać połączenia z wystąpieniem bazy danych PostgreSQL.

Przykładowy kod używany w tym samouczku sprawdza istnienie zmiennej środowiskowej kontenera RUNNING_IN_PRODUCTION, którą można ustawić na dowolną wartość (na przykład 1).

Witryna internetowa zwraca komunikat "Nie znaleziono (404)"

  • Sprawdź wartość adresu URL aplikacji na stronie Przegląd kontenera. Jeśli adres URL aplikacji zawiera słowo "internal", konfiguracja wejścia nie jest poprawnie ustawiona.
  • Sprawdź ruch przychodzący kontenera. Na przykład w portalu Azure przejdź do zasobu Ingress kontenera. Upewnij się, że Ingres HTTP jest włączony, a akceptowanie ruchu z dowolnego miejsca jest zaznaczone.

Strona internetowa nie uruchamia się, pojawia się komunikat "przekroczono limit czasu strumienia" lub nic się nie wyświetla.

  • Sprawdź dzienniki:
    • W portalu Azure przejdź do zasobu zarządzania wersjami aplikacji kontenerowej i sprawdź Stan udostępniania dla kontenera:
      • Jeśli stan to aprowizacja, poczekaj na zakończenie aprowizacji.
      • Jeśli stan to Niepowodzenie, wybierz poprawkę i wyświetl dzienniki konsoli. Wybierz kolejność kolumn, aby wyświetlić Wygenerowany czas, Stream_si Log_s. Posortuj dzienniki od najnowszych i poszukaj komunikatów Python stderr i stdout w kolumnie Stream_s. Dane wyjściowe print języka Python są komunikatami stdout.
    • W interfejsie wiersza polecenia platformy Azure użyj polecenia az containerapp logs show.
  • Jeśli używasz struktury Django, sprawdź, czy tabele restaurants_reviews istnieją w bazie danych. Jeśli nie, użyj konsoli, aby uzyskać dostęp do kontenera i uruchomić polecenie python manage.py migrate.

Następny krok