Memecahkan masalah umum di Azure Container Instances

Artikel ini memperlihatkan cara memecahkan masalah umum untuk mengelola atau menyebarkan kontainer ke Azure Container Instances. Lihat juga Tanya Jawab Umum.

Jika Anda memerlukan dukungan lainnya, lihat opsi Bantuan + dukungan yang tersedia di portal Azure.

Masalah selama penyebaran grup kontainer

Konvensi penamaan

Saat menentukan spesifikasi kontainer Anda, parameter tertentu memerlukan kepatuhan terhadap batasan penamaan. Di bawah ini adalah tabel dengan persyaratan khusus untuk properti grup kontainer. Untuk informasi selengkapnya, lihat Konvensi penamaan di Azure Architecture Center dan Aturan penamaan serta pembatasan untuk sumber daya Azure.

Cakupan Panjang Kapitalisasi Karakter yang valid Pola yang disarankan Contoh
Nama kontainer 1 1-63 Huruf kecil Alfanumerik, dan tanda hubung di mana saja kecuali karakter pertama atau terakhir <name>-<role>-container<number> web-batch-container1
Port kontainer Antara 1 hingga 65535 Bilangan bulat Bilangan bulat antara 1 hingga 65535 <port-number> 443
Label nama DNS 5-63 Tidak sensitif huruf besar atau kecil Alfanumerik, dan tanda hubung di mana saja kecuali karakter pertama atau terakhir <name> frontend-site1
Variabel lingkungan 1-63 Tidak sensitif huruf besar atau kecil Alfanumerik, dan garis bawah (_) di mana saja kecuali karakter pertama atau terakhir <name> MY_VARIABLE
Nama volume 5-63 Huruf kecil Alfanumerik, dan tanda hubung di mana saja kecuali karakter pertama atau terakhir. Tidak boleh berisi dua tanda hubung berturut-turut. <name> batch-output-volume

1Pembatasan juga untuk nama grup kontainer saat tidak ditentukan secara independen dari instans kontainer, misalnya dengan penyebaran perintah az container create.

Versi OS citra tidak didukung

Jika Anda menentukan citra yang tidak didukung Azure Container Instances, kesalahan OsVersionNotSupported akan ditampilkan. Kesalahan ini mirip dengan berikut, di mana {0} adalah nama citra yang Anda coba sebarkan:

{
  "error": {
    "code": "OsVersionNotSupported",
    "message": "The OS version of image '{0}' is not supported."
  }
}

Kesalahan ini paling sering ditemui ketika menyebarkan citra Windows yang didasarkan pada rilis Saluran Semi-Tahunan 1709 atau 1803, yang tidak didukung. Untuk citra Windows yang didukung di Azure Container Instances, lihat Tanya jawab umum.

Tidak dapat menarik citra

Jika Azure Container Instances awalnya tidak dapat menarik gambar Anda, gambar akan diulang untuk waktu. Jika operasi tarik citra terus gagal, ACI akhirnya gagal melakukan penyebaran, dan Anda mungkin melihat kesalahan Failed to pull image.

Untuk mengatasi masalah ini, hapus instans kontainer dan coba lagi penyebaran Anda. Pastikan bahwa citra ada di registri, dan Anda telah mengetikkan nama citra dengan benar.

Jika citra tidak dapat ditarik, peristiwa seperti berikut ini ditampilkan dalam output dari perintah az container show:

"events": [
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "Pulling",
    "type": "Normal"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "Failed to pull image \"mcr.microsoft.com/azuredocs/aci-hellowrld\": rpc error: code 2 desc Error: image t/aci-hellowrld:latest not found",
    "name": "Failed",
    "type": "Warning"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:20+00:00",
    "lastTimestamp": "2017-12-21T22:57:16+00:00",
    "message": "Back-off pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "BackOff",
    "type": "Normal"
  }
],

Kesalahan sumber daya tidak tersedia

Karena berbagai pemuatan sumber daya regional di Azure, Anda mungkin menerima kesalahan berikut saat mencoba menyebarkan instans kontainer:

The requested resource with 'x' CPU and 'y.z' GB memory is not available in the location 'example region' at this moment. Please retry with a different resource request or in another location.

Kesalahan ini menunjukkan bahwa karena beban berat di wilayah tempat Anda mencoba untuk menyebarkan, sumber daya yang ditentukan untuk kontainer Anda tidak dapat dialokasikan pada saat itu. Gunakan satu atau beberapa langkah mitigasi berikut untuk membantu mengatasi masalah Anda.

  • Verifikasi pengaturan penerapan kontainer Anda termasuk dalam parameter yang ditentukan dalam Ketersediaan wilayah untuk Azure Container Instances
  • Tentukan setelan CPU dan memori yang lebih rendah untuk kontainer
  • Menyebarkan ke wilayah Azure yang berbeda
  • Menyebarkan di lain waktu

Masalah selama runtime grup kontainer

Kontainer memiliki restart yang terisolasi tanpa input pengguna yang eksplisit

Terdapat dua kategori umum tentang mengapa grup kontainer dapat dihidupkan ulang tanpa input pengguna secara eksplisit. Pertama, kontainer mungkin mengalami restart yang disebabkan oleh crash proses aplikasi. Layanan ACI merekomendasikan penerapan solusi pengamatan seperti Application Insights SDK, metrik grup kontainer, dan log grup kontainer untuk menentukan mengapa aplikasi mengalami masalah. Kedua, pelanggan mungkin mengalami restart yang dimulai oleh infrastruktur ACI karena peristiwa pemeliharaan. Untuk meningkatkan ketersediaan aplikasi Anda, jalankan beberapa grup kontainer di belakang komponen ingress seperti Application Gateway atau Traffic Manager.

Kontainer terus keluar dan memulai ulang (tidak ada proses yang berjalan lama)

Pengaturan default dari kebijakan mulai ulang grup kontainer diatur ke Selalu, sehingga kontainer dalam grup kontainer selalu dimulai ulang setelah dijalankan hingga selesai. Anda mungkin perlu mengubahnya menjadi OnFailure atau Tidak Pernah jika Anda berniat menjalankan kontainer berbasis tugas. Jika Anda menentukan OnFailure dan masih melihat mulai ulang terus-menerus, mungkin ada masalah dengan aplikasi atau skrip yang dijalankan di kontainer Anda.

Saat menjalankan grup kontainer tanpa proses yang berjalan lama, Anda mungkin melihat keluar berulang kali dan memulai ulang dengan gambar seperti Ubuntu atau Alpine. Menghubungkan melalui EXEC tidak akan berfungsi karena kontainer tidak memiliki proses yang menjaganya tetap hidup. Untuk mengatasi masalah ini, sertakan perintah mulai seperti berikut ini dengan penyebaran grup kontainer Anda agar kontainer tetap berjalan.

## Deploying a Linux container
az container create -g MyResourceGroup --name myapp --image ubuntu --command-line "tail -f /dev/null"
## Deploying a Windows container
az container create -g myResourceGroup --name mywindowsapp --os-type Windows --image mcr.microsoft.com/windows/servercore:ltsc2019
 --command-line "ping -t localhost"

API Container Instances dan portal Azure menyertakan restartCount properti . Untuk memeriksa jumlah mulai ulang untuk kontainer, Anda dapat menggunakan perintah az container show di Azure CLI. Dalam contoh output berikut (yang telah dikosongkan untuk brevity), Anda dapat melihat properti restartCount di akhir output.

...
 "events": [
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:06+00:00",
     "lastTimestamp": "2017-11-13T21:20:06+00:00",
     "message": "Pulling: pulling image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Pulled: Successfully pulled image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Created: Created container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Started: Started container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   }
 ],
 "previousState": null,
 "restartCount": 0
...
}

Catatan

Sebagian besar gambar kontainer untuk distribusi Linux mengatur shell, seperti bash, sebagai perintah default. Karena shell sendiri bukan layanan yang berjalan lama, kontainer ini segera keluar dan mengalami perulangan proses mulai ulang ketika dikonfigurasi dengan pengaturan kebijakan mulai ulang default Selalu.

Kontainer membutuhkan waktu lama untuk memulai

Tiga faktor utama yang berkontribusi pada waktu mulai kontainer di Azure Container Instances adalah:

Citra Windows memiliki pertimbangan tambahan.

Ukuran gambar

Jika kontainer Anda membutuhkan waktu lama untuk memulai, tetapi akhirnya berhasil, mulailah dengan melihat ukuran citra kontainer Anda. Karena Azure Container Instances menarik citra kontainer sesuai permintaan, waktu mulai yang Anda lihat terkait langsung dengan ukurannya.

Anda dapat melihat ukuran citra kontainer Anda dengan menggunakan perintah docker images di Docker CLI:

docker images
REPOSITORY                                    TAG       IMAGE ID        CREATED          SIZE
mcr.microsoft.com/azuredocs/aci-helloworld    latest    7367f3256b41    15 months ago    67.6MB

Kunci untuk menjaga ukuran gambar tetap kecil adalah memastikan bahwa gambar akhir Anda tidak berisi apa pun yang tidak diperlukan pada runtime. Salah satu cara untuk melakukan ini adalah dengan build multi-tahap. Build multi-tahap memudahkan untuk memastikan bahwa gambar akhir hanya berisi artefak yang Anda butuhkan untuk aplikasi Anda, dan bukan konten tambahan yang diperlukan pada waktu build.

Lokasi citra

Cara lain untuk mengurangi dampak penarikan citra pada waktu mulai kontainer Anda adalah dengan menghosting citra kontainer di Azure Container Registry di wilayah yang sama dengan tempat Anda ingin menyebarkan instans kontainer. Ini mempersingkat jalur jaringan yang perlu dilalui citra kontainer, secara signifikan mempersingkat waktu pengunduhan.

Cache citra

Azure Container Instances menggunakan mekanisme penembolokan untuk membantu mempercepat waktu mulai kontainer untuk citra yang dibangun pada citra dasar Windows umum, termasuk nanoserver:1809, servercore:ltsc2019, dan servercore:1809. Citra Linux yang umum digunakan seperti ubuntu:1604 dan alpine:3.6 juga ditembolokan. Untuk citra Windows dan Linux, hindari menggunakan tag latest. Tinjau Praktik terbaik tag citra dari Container Registry untuk panduan. Untuk daftar terbaru cache citra dan tag, gunakan API Daftar Cache Citra.

Catatan

Penggunaan citra berbasis Windows Server 2019 di Azure Container Instances sedang dalam pratinjau.

Kontainer Windows memperlambat kesiapan jaringan

Pada pembuatan awal, kontainer Windows mungkin tidak memiliki konektivitas masuk hingga 30 detik (atau lebih, dalam kasus yag jarang terjadi). Jika aplikasi kontainer Anda memerlukan koneksi Internet, tambahkan penundaan dan coba lagi logika untuk memungkinkan 30 detik untuk membangun konektivitas Internet. Setelah penyiapan awal, jaringan kontainer harus dilanjutkan dengan tepat.

Tidak dapat terhubung ke API Docker yang mendasari atau menjalankan kontainer istimewa

Azure Container Instances tidak mengekspose akses langsung ke infrastruktur yang mendasarinya yang menjadi host grup kontainer. Ini termasuk akses ke runtime kontainer, teknologi orkestrasi, dan menjalankan operasi kontainer istimewa. Untuk melihat operasi apa yang didukung oleh ACI, periksa dokumentasi referensi REST. Jika ada sesuatu yang hilang, kirimkan permintaan di forum umpan balik ACI.

Alamat IP grup kontainer mungkin tidak dapat diakses karena port yang tidak cocok

Azure Container Instances belum mendukung pemetaan port seperti dengan konfigurasi docker reguler. Jika Anda menemukan alamat IP grup kontainer tidak dapat diakses ketika Anda yakin seharusnya dapat diakses, pastikan Anda telah mengonfigurasi citra kontainer Anda untuk mendengarkan port yang sama yang Anda ekspos di grup kontainer Anda dengan properti ports.

Jika Anda ingin mengonfirmasi bahwa Azure Container Instances dapat mendengarkan pada port yang Anda konfigurasi di citra kontainer Anda, uji penyebaran gambar aci-helloworld yang mengekspos port. Jalankan juga aplikasi aci-helloworld sehingga mendengarkan di port. aci-helloworld menerima variabel lingkungan opsional PORT untuk menimpa port default 80 yang didengarkannya. Misalnya, untuk menguji port 9000, atur variabel lingkungan saat Anda membuat grup kontainer:

  1. Siapkan grup kontainer untuk mengekspose port 9000, dan berikan nomor port sebagai nilai variabel lingkungan. Contoh ini diformat untuk shell Bash. Jika Anda lebih suka shell lain seperti PowerShell atau Perintah, Anda harus menyesuaikan penetapan variabel yang sesuai.

    az container create --resource-group myResourceGroup \
    --name mycontainer --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --ip-address Public --ports 9000 \
    --environment-variables 'PORT'='9000'
    
  2. Temukan alamat IP grup kontainer dalam output perintah dari az container create. Carilah nilai ip.

  3. Setelah kontainer berhasil diprovisikan, telusuri alamat IP dan port aplikasi kontainer di browser Anda, misalnya: 192.0.2.0:9000.

    Anda akan melihat pesan "Selamat Datang di Azure Container Instances!" yang ditampilkan oleh aplikasi web.

  4. Setelah selesai menggunakan kontainer, hapus kontainer menggunakan perintah az container delete:

    az container delete --resource-group myResourceGroup --name mycontainer
    

Masalah selama penyebaran grup kontainer rahasia

Kesalahan kebijakan saat menggunakan kebijakan CCE kustom

Kebijakan CCE kustom harus dihasilkan ekstensi confcom Azure CLI. Sebelum membuat kebijakan, pastikan bahwa semua properti yang ditentukan dalam templat ARM Anda valid dan sesuai dengan apa yang Anda harapkan untuk diwakili dalam kebijakan komputasi rahasia. Beberapa properti untuk divalidasi termasuk gambar kontainer, variabel lingkungan, pemasangan volume, dan perintah kontainer.

Hash yang hilang dari kebijakan

Ekstensi confcom Azure CLI akan menggunakan gambar cache pada komputer lokal Anda yang mungkin tidak cocok dengan yang tersedia dari jarak jauh yang dapat mengakibatkan ketidakcocokan lapisan saat kebijakan divalidasi. Pastikan Anda menghapus gambar lama dan menarik gambar kontainer terbaru ke lingkungan lokal Anda. Setelah yakin bahwa Anda memiliki SHA terbaru, Anda harus meregenerasi kebijakan CCE.

Proses/kontainer dihentikan dengan kode keluar: 139

Kode keluar ini terjadi karena keterbatasan dengan gambar dasar Ubuntu Versi 22.04. Rekomendasinya adalah menggunakan gambar dasar yang berbeda untuk mengatasi masalah ini.

Langkah berikutnya

Pelajari cara mengambil log kontainer dan peristiwa untuk membantu men-debug kontainer Anda.