Artikel ini membahas tanya jawab umum dan masalah lain yang diketahui tentang Azure Container Registry.
Untuk panduan pemecahan masalah registri, lihat:
Manajemen sumber daya
Bisakah saya membuat Azure Container Registry di Azure Stack Hub menggunakan templat Resource Manager?
Ya. Berikut adalah templat yang dapat Anda gunakan untuk membuat registri. Templat ini untuk cloud publik Azure. Untuk menggunakan templat ini terhadap Azure Stack Hub, ubah versi API menjadi 2019-05-01, jika tidak, templat gagal disebarkan.
Apakah ada pemindaian kerentanan keamanan untuk gambar di Azure Container Registry di Azure Stack Hub?
Tidak. Saat ini tidak ada integrasi dengan Azure Security Center untuk registri yang disebarkan di Azure Stack Hub. Ada opsi pihak ke-3 dan sumber terbuka yang dapat dimanfaatkan untuk memenuhi kebutuhan akan penyebaran Azure Stack Hub yang tersambung atau terputus ini.
Bagaimana cara mengonfigurasi Kubernetes dengan Azure Container Registry?
Lihat dokumentasi untuk Kubernetes dan langkah-langkah untuk Azure Kubernetes Service.
Bagaimana cara mendapatkan kredensial admin untuk registri kontainer?
Penting
Akun pengguna admin dideasain agar satu pengguna dapat mengakses registri, terutama untuk tujuan pengujian. Kami tidak menyarankan untuk membagikan kredensial akun admin dengan beberapa pengguna. Identitas individu direkomendasikan untuk pengguna dan perwakilan layanan untuk skenario headless. Lihat Gambaran autentikasi.
Sebelum mendapatkan kredensial admin, pastikan pengguna admin registri diaktifkan.
Untuk mendapatkan kredensial menggunakan Azure CLI:
az acr credential show -n myRegistry
Menggunakan Azure PowerShell:
Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry
Bagaimana cara mendapatkan kredensial admin di templat Resource Manager?
Penting
Akun pengguna admin dideasain agar satu pengguna dapat mengakses registri, terutama untuk tujuan pengujian. Kami tidak menyarankan untuk membagikan kredensial akun admin dengan beberapa pengguna. Identitas individu direkomendasikan untuk pengguna dan perwakilan layanan untuk skenario headless. Lihat Gambaran autentikasi.
Sebelum mendapatkan kredensial admin, pastikan pengguna admin registri diaktifkan.
Untuk mendapatkan kata sandi pertama:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}
Untuk mendapatkan kata sandi kedua:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}
Bagaimana cara mendorong citra kontainer di Azure Container Registry ke penyebaran Azure Stack Hub yang terputus yang menjalankan Kubernetes?
Anda dapat melakukan transfer citra mesin-ke-mesin melalui jaringan lokal dari komputer yang sudah memiliki citra kontainer yang diperlukan. Untuk melakukan ini:
Pertama, ambil citra kontainer yang diperlukan menggunakan komputer yang terhubung ke Internet menggunakan CLI docker dan perintah penarikan docker. Lihat Mengimpor citra kontainer ke registri kontainer untuk informasi selengkapnya.
Setelah Anda mengimpor citra yang diperlukan, transportasikan komputer ke lokasi instans Azure Hub yang terputus.
Gunakan tag docker dan perintah pendorongan docker untuk menandai dan mendorong citra ke Azure Container Registry lokal di repositori Azure Stack Hub.
Operasi registri
Bagaimana cara mengakses Docker Registry HTTP API V2?
Azure Container Registry mendukung Docker Registry HTTP API V2. API dapat diakses di https://<your registry login server>/v2/
. Contoh: https://mycontainerregistry.azsacr.<regionname>.<fqdn>/v2/
Bagaimana cara menghapus semua manifes yang tidak direferensikan oleh tag apa pun di repositori?
Jika Anda berada di bash:
az acr manifest list-metadata --name myRepository --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | xargs -I% az acr repository delete --name myRegistry --image myRepository@%
Untuk PowerShell:
az acr manifest list-metadata --name myRepository --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }
Catatan
Anda dapat menambahkan --yes
dalam perintah hapus untuk melompati konfirmasi.
Untuk informasi selengkapnya, lihat Menghapus gambar kontainer di Azure Container Registry.
Mengapa penggunaan kuota registri tidak berkurang setelah menghapus gambar?
Situasi ini dapat terjadi jika lapisan yang mendasarinya masih dirujuk oleh gambar kontainer lainnya. Jika Anda menghapus gambar tanpa referensi, penggunaan registri akan diperbarui dalam beberapa menit.
Bagaimana cara memvalidasi perubahan kuota penyimpanan?
Membuat gambar dengan lapisan 1GB menggunakan file docker berikut. Ini memastikan bahwa gambar memiliki lapisan yang tidak dibagikan oleh gambar lain dalam registri.
FROM alpine
RUN dd if=/dev/urandom of=1GB.bin bs=32M count=32
RUN ls -lh 1GB.bin
Buat dan dorong gambar ke registri Anda menggunakan CLI docker.
docker build -t myregistry.azsacr.<regionname>.<fqdn>/1gb:latest .
docker push myregistry.azsacr.<regionname>.<fqdn>/1gb:latest
Anda seharusnya dapat melihat bahwa penggunaan penyimpanan telah meningkat di portal Azure Stack Hub, atau Anda dapat mengkueri penggunaan menggunakan CLI.
az acr show-usage -n myregistry
Hapus gambar menggunakan Azure CLI atau portal dan periksa penggunaan yang diperbarui dalam beberapa menit.
az acr repository delete -n myregistry --image 1gb
Bagaimana cara mengautentikasi dengan registri saya saat menjalankan CLI dalam kontainer?
Anda perlu menjalankan kontainer Azure CLI dengan memasang soket Docker:
docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev
Dalam kontainer, instal docker
:
apk --update add docker
Kemudian autentikasi dengan registri Anda:
az acr login -n MyRegistry
Bagaimana cara mengaktifkan TLS 1.2?
Aktifkan TLS 1.2 dengan menggunakan klien docker terbaru (versi 18.03.0 atau yang lebih baru).
Penting
Mulai 13 Januari 2020, Azure Container Registry akan memerlukan semua koneksi aman dari server dan aplikasi untuk menggunakan TLS 1.2. Dukungan untuk TLS 1.0 dan 1.1 akan dihentikan.
Apakah Azure Container Registry di Azure Stack Hub mendukung Content Trust?
Tidak, rilis saat ini registri kontainer Azure di Azure Stack Hub hanya mendukung SKU "Standar" dan tidak mendukung Content Trust.
Bagaimana cara memberikan akses untuk menarik atau mendorong gambar tanpa izin untuk mengelola sumber daya registri?
Azure Container Registry mendukung peran kustom yang menyediakan tingkat izin yang berbeda. Secara khusus, peran AcrPull
dan AcrPush
memungkinkan pengguna untuk menarik dan/atau mendorong gambar tanpa izin untuk mengelola sumber daya registri di Azure.
Portal Azure Stack Hub: Registri Anda -> Access Control (IAM) -> Tambahkan (Pilih
AcrPull
atauAcrPush
untuk Peran).Azure CLI: Temukan ID sumber daya registri dengan menjalankan perintah berikut:
az acr show -n myRegistry
Kemudian Anda dapat menetapkan
AcrPull
atau peranAcrPush
kepada pengguna (contoh berikut menggunakanAcrPull
):az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
Atau, tetapkan peran ke perwakilan layanan yang diidentifikasi oleh ID aplikasinya:
az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
Penerima tugas kemudian dapat mengautentikasi dan mengakses gambar dalam registri.
Untuk mengotentikasi ke registri:
az acr login -n myRegistry
Untuk mencantumkan repositori:
az acr repository list -n myRegistry
Untuk menarik gambar:
docker pull myregistry.azsacr.<regionname>.<fqdn>/hello-world
Dengan hanya menggunakan peran AcrPull
atau AcrPush
, penerima tugas tidak memiliki izin untuk mengelola sumber daya registri di Azure. Misalnya, az acr list
atau az acr show -n myRegistry
tidak akan menampilkan registri.
Bagaimana cara mendorong lapisan yang tidak dapat didistribusikan ke registri?
Lapisan yang tidak dapat didistribusikan dalam manifes berisi parameter URL tempat konten tersebut dapat diambil. Beberapa kemungkinan kasus penggunaan untuk mengaktifkan dorongan lapisan yang tidak dapat didistribusikan adalah untuk registri terbatas jaringan, registri bercelah udara dengan akses terbatas, atau untuk registri tanpa konektivitas internet.
Misalnya, jika Anda memiliki aturan NSG yang disiapkan sehingga VM hanya dapat menarik gambar dari registri kontainer Azure Anda, Docker akan menarik kegagalan untuk lapisan asing/yang tidak dapat didistribusikan. Misalnya, gambar Windows Server Core akan berisi referensi lapisan asing ke registri kontainer Azure dalam manifesnya dan akan gagal menarik skenario ini.
Untuk mengaktifkan mendorong lapisan yang tidak dapat didistribusikan:
Edit file
daemon.json
, yang terletak di/etc/docker/
host Linux dan diC:\ProgramData\docker\config\daemon.json
pada Windows Server. Dengan berasumsi file sebelumnya kosong, tambahkan konten berikut:{ "allow-nondistributable-artifacts": ["myregistry.azsacr.<regionname>.<fqdn>"] }
Catatan
Nilainya adalah array alamat registri, yang dipisahkan oleh koma.
Simpan dan keluar dari file.
Mulai ulang Docker.
Ketika Anda mendorong gambar ke registri dalam daftar, lapisan yang tidak dapat didistribusikan mereka didorong ke registri.
Peringatan
Artefak yang tidak dapat didistribusikan biasanya memiliki batasan tentang cara dan tempat artefak tersebut dapat didistribusikan dan dibagikan. Gunakan fitur ini hanya untuk mendorong artefak ke registri privat. Pastikan Anda mematuhi setiap persyaratan yang mencakup mendistribusikan kembali artefak yang tidak dapat didistribusikan.
Aktivitas diagnostik dan kesehatan
Periksa kesehatan dengan 'az acr check-health'
Untuk memecahkan masalah registri dan lingkungan umum, lihat Memeriksa kesehatan registri kontainer Azure.
Penarikan Docker gagal dengan kesalahan: net/http: permintaan dibatalkan saat menunggu koneksi (Client.Timeout terlampaui saat menunggu header)
- Jika kesalahan ini adalah masalah sementara, maka coba lagi akan berhasil.
- Jika
docker pull
gagal terus menerus, mungkin ada masalah dengan daemon Docker. Masalah umumnya dapat dimitigasi dengan memulai kembali daemon Docker. - Jika Anda terus melihat masalah ini setelah memulai ulang daemon Docker, masalahnya mungkin saja beberapa isu konektivitas jaringan dengan komputer. Untuk memeriksa apakah jaringan umum pada komputer sehat, jalankan perintah berikut untuk menguji konektivitas titik akhir. Versi
az acr
minimum yang berisi perintah pemeriksaan konektivitas ini adalah 2.2.9. Mutakhirkan Azure CLI jika Anda menggunakan versi yang lebih lama.
az acr check-health -n myRegistry
- Anda harus selalu memiliki mekanisme coba lagi pada semua operasi klien Docker.
Penarikan Docker lambat
Gunakan alat ini untuk menguji kecepatan unduhan jaringan komputer Anda.
Docker push lambat
Gunakan alat ini untuk menguji kecepatan unggahan jaringan komputer Anda.
Docker push berhasil tetapi penarikan docker gagal dengan kesalahan: tidak sah: autentikasi diperlukan
Kesalahan ini dapat terjadi dengan daemon Docker versi Red Hat, di mana --signature-verification
diaktifkan secara default. Anda dapat memeriksa opsi daemon Docker untuk Red Hat Enterprise Linux (RHEL) atau Fedora dengan menjalankan perintah berikut:
grep OPTIONS /etc/sysconfig/docker
Misalnya, Fedora 28 Server memiliki opsi daemon docker berikut:
OPTIONS='--selinux-enabled --log-driver=journald --live-restore'
Dengan --signature-verification=false
hilang, docker pull
gagal dengan kesalahan yang mirip dengan:
Trying to pull repository myregistry.azsacr.<regionname>.<fqdn>/myimage ...
unauthorized: authentication required
Untuk mengatasi masalah ini:
Tambahkan opsi
--signature-verification=false
ke file konfigurasi daemon Docker/etc/sysconfig/docker
. Contohnya:OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'
Mulai ulang layanan daemon Docker dengan menjalankan perintah berikut:
sudo systemctl restart docker.service
Detail --signature-verification
dapat ditemukan dengan menjalankan man dockerd
.
az acr login berhasil tetapi docker gagal dengan kesalahan: tidak sah: autentikasi diperlukan
Pastikan Anda menggunakan URL server semua huruf kecil, misalnya, docker push myregistry.azsacr.<regionname>.<fqdn>/myimage:latest
, bahkan jika nama sumber daya registri adalah huruf besar atau gabungan huruf besar dan kecil, seperti myRegistry
.
Mengaktifkan dan mendapatkan log debug daemon Docker
Mulai dockerd
dengan opsi debug
. Pertama, buat file konfigurasi daemon Docker (/etc/docker/daemon.json
) jika tidak ada, dan tambahkan opsi debug
:
{
"debug": true
}
Kemudian, mulai ulang daemon. Misalnya, dengan Ubuntu 14.04:
sudo service docker restart
Detail dapat ditemukan dalam dokumentasi Docker.
Log dapat dihasilkan di lokasi yang berbeda, tergantung sistem Anda. Misalnya, untuk Ubuntu 14.04, itu
/var/log/upstart/docker.log
.
Lihat dokumentasi Docker untuk mengetahui detailnya.Untuk Docker untuk Windows, log dihasilkan di bawah %LOCALAPPDATA%/docker/. Namun ini mungkin belum berisi semua informasi debug.
Untuk mengakses log daemon lengkap, Anda mungkin memerlukan beberapa langkah tambahan:
docker run --privileged -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker:/usr/local/bin/docker alpine sh docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh chroot /host
Sekarang Anda memiliki akses ke semua file VM yang menjalankan
dockerd
. Log berada di/var/log/docker.log
.
Izin pengguna baru mungkin tidak segera berlaku setelah memperbarui
Ketika Anda memberikan izin baru (peran baru) kepada perwakilan layanan, perubahan mungkin tidak segera diterapkan. Ada dua kemungkinan alasannya:
Penundaan penetapan peran Microsoft Entra. Biasanya cepat, tetapi bisa memakan waktu beberapa menit karena penundaan perambatan.
Penundaan izin di server token Azure Container Registry. Proses ini membutuhkan waktu hingga 10 menit. Untuk mengatasinya, Anda dapat
docker logout
dan kemudian mengautentikasi lagi dengan pengguna yang sama setelah 1 menit:docker logout myregistry.azsacr.<regionname>.<fqdn> docker login myregistry.azsacr.<regionname>.<fqdn>
Informasi autentikasi tidak diberikan dalam format yang benar pada panggilan REST API langsung
Anda mungkin mengalami kesalahan InvalidAuthenticationInfo
, terutama menggunakan alat curl
dengan opsi -L
, --location
(untuk mengikuti pengalihan).
Misalnya, mengambil blob menggunakan curl
dengan opsi -L
dan autentikasi dasar:
curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest
dapat mengakibatkan respons berikut:
<?xml version="1.0" encoding="utf-8"?>
<Error><Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
RequestId:00000000-0000-0000-0000-000000000000
Time:2019-01-01T00:00:00.0000000Z</Message></Error>
Akar penyebabnya adalah bahwa beberapa implementasi curl
mengikuti pengalihan dengan header dari permintaan asli.
Untuk menyelesaikan masalah tersebut, Anda perlu mengikuti pengalihan secara manual tanpa header. Cetak header respons dengan opsi -D -
dari curl
dan kemudian ekstrak: header Location
:
redirect_url=$(curl -s -D - -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest | grep "^Location: " | cut -d " " -f2 | tr -d '\r')
curl $redirect_url
Mengapa portal Azure Stack Hub tidak mencantumkan semua repositori atau tag saya?
Jika Anda menggunakan browser Microsoft Edge/IE, Anda dapat melihat paling banyak 100 repositori atau tag. Jika registri Anda memiliki lebih dari 100 repositori atau tag, sebaiknya gunakan browser Firefox atau Chrome untuk mencantumkan semuanya.
Mengapa portal Azure Stack Hub gagal mengambil repositori atau tag?
Browser mungkin tidak dapat mengirim permintaan untuk mengambil repositori atau tag ke server. Mungkin ada berbagai alasan seperti:
- Konektivitas jaringan
- Firewall
- Menggunakan portal dari jaringan publik untuk registri yang hanya mengizinkan akses pribadi
- Pemblokir iklan
- Kesalahan DNS
Silakan hubungi administrator jaringan Anda atau periksa konfigurasi dan konektivitas jaringan Anda. Coba jalankan az acr check-health -n yourRegistry
menggunakan Azure CLI Anda untuk memeriksa apakah lingkungan Anda dapat terhubung ke Container Registry. Selain itu, Anda juga dapat mencoba sesi incognito atau pribadi di browser Anda untuk menghindari cache atau cookie browser kedaluwarsa.
Mengapa permintaan tarik atau dorong saya gagal dengan operasi yang tidak diizinkan?
Berikut adalah beberapa skenario di mana operasi mungkin tidak diizinkan:
- Gambar atau repositori mungkin terkunci sehingga tidak dapat dihapus atau diperbarui. Anda dapat menggunakan perintah az acr show repository untuk melihat atribut saat ini.
- Beberapa operasi dilarang jika gambar berada di karantina. Pelajari lebih lanjut tentang karantina.
- Registri Anda mungkin telah mencapai batas penyimpanannya.
Format repositori tidak valid atau tidak didukung
Jika Anda melihat kesalahan seperti "format repositori yang tidak didukung", "format tidak valid", atau "data yang diminta tidak ada" saat menentukan nama repositori dalam operasi repositori, periksa ejaan dan huruf besar atau kecil dari nama. Nama repositori yang valid hanya dapat menyertakan karakter alfanumerik huruf kecil, titik, tanda hubung, garis bawah, dan garis miring.
Bagaimana cara mengumpulkan jejak http di Windows?
Prasyarat
- Aktifkan dekripsi https di fiddler: https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/DecryptHTTPS
- Aktifkan Docker untuk menggunakan proxy melalui ui Docker: https://docs.docker.com/docker-for-windows/#proxies
- Pastikan untuk kembali ketika selesai. Docker tidak akan berfungsi dengan ini diaktifkan dan fiddler tidak berjalan.
Kontainer Windows
Mengonfigurasi proksi Docker ke 127.0.0.1:8888
Kontainer Linux
Temukan ip dari sakelar virtual vm Docker:
(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress
Mengonfigurasi proksi Docker ke output perintah sebelumnya dan port 8888 (misalnya 10.0.75.1:8888)
Langkah berikutnya
- Pelajari lebih lanjut tentang Azure Container Registry.