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 Anda menentukan spesifikasi kontainer, parameter tertentu memerlukan kepatuhan terhadap pembatasan penamaan. Tabel berikut ini memperlihatkan 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 saat menyebarkan gambar 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, Azure Container Instances akan mencoba kembali untuk waktu yang lama. 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 gambar ada di registri dan Anda mengetikkan nama gambar 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 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 Anda menjalankan grup kontainer tanpa proses yang berjalan lama, Anda mungkin melihat keluar berulang dan memulai ulang dengan gambar seperti Ubuntu atau Alpine. Menyambungkan melalui EXEC tidak akan berfungsi karena kontainer tidak memiliki proses untuk membuatnya tetap hidup. Untuk mengatasi masalah ini, sertakan perintah mulai seperti contoh berikut dengan penyebaran grup kontainer Anda untuk menjaga 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"
CONTAINER Instances API 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 kami potong untuk brevity, Anda akan melihat restartCount
properti 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 lebih lanjut.
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 saat 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 tersambung ke Docker API yang mendasarinya atau menjalankan kontainer istimewa
Azure Container Instances tidak mengekspos akses langsung ke infrastruktur yang mendasar yang menghosting grup kontainer. Ini termasuk akses ke runtime kontainer, teknologi orkestrasi, dan menjalankan operasi kontainer istimewa. Untuk melihat operasi apa yang didukung 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, pastikan Anda mengonfigurasi gambar kontainer untuk mendengarkan port yang sama dengan yang Anda ekspos di grup kontainer Anda dengan ports
properti .
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:
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 Prompt Perintah, Anda perlu 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'
Temukan alamat IP grup kontainer dalam output perintah dari
az container create
. Carilah nilai ip.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.
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 cocok 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 menggunakan gambar yang di-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.