Sık sorulan sorular - Azure Stack Hub'da Azure Container Registry

Bu makalede Azure Container Registry hakkında sık sorulan sorular ve bilinen sorunlar ele alınıyor.

Kayıt defteri sorun giderme kılavuzu için bkz:

Kaynak yönetimi

Resource Manager şablonu kullanarak Azure Stack Hub'da Azure Container Registry oluşturabilir miyim?

Evet. Kayıt defteri oluşturmak için kullanabileceğiniz bir şablon aşağıdadır. Bu şablon Azure genel bulutu içindir. Bu şablonu Azure Stack Hub'da kullanmak için API sürümünü 2019-05-01 olarak değiştirin; aksi takdirde dağıtılamaz.

Azure Stack Hub'da ACR'de görüntüler için güvenlik açığı taraması var mı?

Hayır. Şu anda Azure Stack Hub'da dağıtılan kayıt defterleri için Azure Güvenlik Merkezi tümleştirmesi yoktur. Bağlı veya bağlantısız Azure Stack Hub dağıtımları için bu gereksinimi doldurmak için kullanılabilecek üçüncü taraf ve açık kaynak seçenekleri vardır.

Kubernetes'i Azure Container Registry ile Nasıl yaparım? yapılandırabilirsiniz?

Kubernetes belgelerine ve Azure Kubernetes Service adımlarına bakın.

Kapsayıcı kayıt defteri için yönetici kimlik bilgilerini Nasıl yaparım? alın?

Önemli

Yönetici kullanıcı hesabı, tek bir kullanıcının kayıt defterine erişmesi için tasarlanmıştır ve çoğunlukla test amaçlıdır. Yönetici hesabı kimlik bilgilerinin birden çok kullanıcıyla paylaşılması önerilmez. Başsız senaryolar için kullanıcılar ve hizmet sorumluları için tek tek kimlik önerilir. Bkz . Kimlik doğrulamasına genel bakış.

Yönetici kimlik bilgilerini almadan önce kayıt defterinin yönetici kullanıcısının etkinleştirildiğinden emin olun.

Azure CLI kullanarak kimlik bilgilerini almak için:

az acr credential show -n myRegistry

Azure PowerShell kullanma:

Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry

Resource Manager şablonunda yönetici kimlik bilgilerini Nasıl yaparım? edinin?

Önemli

Yönetici kullanıcı hesabı, tek bir kullanıcının kayıt defterine erişmesi için tasarlanmıştır ve çoğunlukla test amaçlıdır. Yönetici hesabı kimlik bilgilerinin birden çok kullanıcıyla paylaşılması önerilmez. Başsız senaryolar için kullanıcılar ve hizmet sorumluları için tek tek kimlik önerilir. Bkz . Kimlik doğrulamasına genel bakış.

Yönetici kimlik bilgilerini almadan önce kayıt defterinin yönetici kullanıcısının etkinleştirildiğinden emin olun.

İlk parolayı almak için:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}

İkinci parolayı almak için:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}

Nasıl yaparım? kubernetes çalıştıran bağlantısı kesilmiş bir Azure Stack Hub dağıtımına Azure Container Registry bir kapsayıcı görüntüsü göndermek mi?

Gerekli kapsayıcı görüntülerine sahip bir makineden yerel ağ üzerinden makineden makineye görüntü aktarımı gerçekleştirebilirsiniz. Bunu yapmak için:

  1. İlk olarak, docker CLI ve docker pull komutunu kullanarak İnternet bağlantısı olan bir makine kullanarak gerekli kapsayıcı görüntülerini alın. Daha fazla bilgi için bkz. Kapsayıcı görüntülerini kapsayıcı kayıt defterine aktarma .

  2. Gerekli görüntüleri içeri aktardıktan sonra, makineyi bağlantısı kesilmiş Azure Hub örneğinin konumuna aktarın.

  3. Görüntüyü etiketlemek ve Azure Stack Hub deposundaki yerel Azure Container Registry göndermek için docker etiketini ve docker push komutlarını kullanın.

Kayıt defteri işlemleri

Docker Registry HTTP API V2'ye Nasıl yaparım? erişin?

ACR, Docker Kayıt Defteri HTTP API V2'lerini destekler. API'lere adresinden https://<your registry login server>/v2/erişilebilir. Örnek: https://mycontainerregistry.azsacr.<regionname>.<fqdn>/v2/

Depodaki hiçbir etiket tarafından başvurulmayan tüm bildirimler Nasıl yaparım? silinsin mi?

Bash kullanıyorsanız:

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@%

PowerShell için:

az acr manifest list-metadata --name myRepository --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }

Not

Onayı atlamak için delete komutuna ekleyebilirsiniz --yes .

Daha fazla bilgi için bkz. Azure Container Registry'da kapsayıcı görüntülerini silme.

Görüntüleri sildikten sonra kayıt defteri kotası kullanımı neden azaltılmaz?

Bu durum, temel alınan katmanlara diğer kapsayıcı görüntüleri tarafından başvurulmaya devam ediyorsa oluşabilir. Başvuru içermeyen bir görüntüyü silerseniz kayıt defteri kullanımı birkaç dakika içinde güncelleştirilir.

Depolama kotası değişikliklerini doğrulama Nasıl yaparım??

Aşağıdaki docker dosyasını kullanarak 1 GB katmanına sahip bir görüntü oluşturun. Bu, görüntünün kayıt defterindeki başka bir görüntü tarafından paylaşılmayan bir katmana sahip olmasını sağlar.

FROM alpine
RUN dd if=/dev/urandom of=1GB.bin  bs=32M  count=32
RUN ls -lh 1GB.bin

Docker CLI kullanarak görüntüyü derleyin ve kayıt defterinize gönderin.

docker build -t myregistry.azsacr.<regionname>.<fqdn>/1gb:latest .
docker push myregistry.azsacr.<regionname>.<fqdn>/1gb:latest

Azure Stack Hub portalında depolama kullanımının arttığını görebilmeli veya CLI kullanarak kullanımı sorgulayabilirsiniz.

az acr show-usage -n myregistry

Azure CLI veya portalı kullanarak görüntüyü silin ve birkaç dakika içinde güncelleştirilmiş kullanımı denetleyin.

az acr repository delete -n myregistry --image 1gb

CLI'yi kapsayıcıda çalıştırırken kayıt defterimle kimlik doğrulaması Nasıl yaparım??

Docker yuvasını takarak Azure CLI kapsayıcısını çalıştırmanız gerekir:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev

Kapsayıcıda yükleyin docker:

apk --update add docker

Ardından kayıt defterinizle kimlik doğrulaması yapın:

az acr login -n MyRegistry

TLS 1.2 nasıl etkinleştirilir?

Son docker istemcilerini (sürüm 18.03.0 ve üzeri) kullanarak TLS 1.2'yi etkinleştirin.

Önemli

13 Ocak 2020'den itibaren Azure Container Registry, sunuculardan ve uygulamalardan gelen tüm güvenli bağlantıların TLS 1.2 kullanmasını gerektirecektir. TLS 1.0 ve 1.1 desteği kullanımdan kaldırılacaktır.

Azure Stack Hub'da Azure Container Registry İçerik Güvenini destekliyor mu?

Hayır, Azure Stack Hub'da Geçerli Azure kapsayıcı kayıt defteri sürümü yalnızca "Standart" SKU'yu destekler ve İçerik Güveni'ni desteklemez.

Kayıt defteri kaynağını yönetme izni olmadan görüntüleri çekme veya gönderme erişimi Nasıl yaparım??

ACR, farklı izin düzeyleri sağlayan özel rolleri destekler. Özellikle ve AcrPush rolleri, AcrPull kullanıcıların Azure'da kayıt defteri kaynağını yönetme izni olmadan görüntüleri çekmesine ve/veya göndermesine olanak tanır.

  • Azure Stack Hub portalı: Kayıt defteriniz -> Access Control (IAM) -> Ekle (Rol için veya AcrPush seçinAcrPull).

  • Azure CLI: Aşağıdaki komutu çalıştırarak kayıt defterinin kaynak kimliğini bulun:

    az acr show -n myRegistry
    

    Ardından veya AcrPush rolünü bir kullanıcıya atayabilirsiniz AcrPull (aşağıdaki örnekte kullanılırAcrPull):

    az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
    

    Veya rolü uygulama kimliğiyle tanımlanan bir hizmet sorumlusuna atayın:

    az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
    

Atayan daha sonra kayıt defterindeki görüntülerin kimliğini doğrulayıp bunlara erişebilir.

  • Kayıt defterinde kimlik doğrulaması yapmak için:

    az acr login -n myRegistry 
    
  • Depoları listelemek için:

    az acr repository list -n myRegistry
    
  • Resim çekmek için:

    docker pull myregistry.azsacr.<regionname>.<fqdn>/hello-world
    

Yalnızca AcrPull veya AcrPush rolünün kullanılmasıyla, atananın Azure'da kayıt defteri kaynağını yönetme izni yoktur. Örneğin, az acr list veya az acr show -n myRegistry kayıt defterini göstermez.

Dağıtılamayan katmanları kayıt defterine göndermek Nasıl yaparım??

Bildirimdeki dağıtılabilir olmayan bir katman, içeriğin getirilebileceği bir URL parametresi içerir. Dağıtılamayan katman gönderimlerini etkinleştirmeye yönelik bazı olası kullanım örnekleri ağ kısıtlı kayıt defterleri, kısıtlı erişime sahip havayla eşlenen kayıt defterleri veya İnternet bağlantısı olmayan kayıt defterleri içindir.

Örneğin, bir VM'nin yalnızca Azure kapsayıcı kayıt defterinizden görüntü çekebilmesi için NSG kurallarınız ayarlanmışsa Docker, yabancı/dağıtılamayan katmanlar için hataları çeker. Örneğin, bir Windows Server Core görüntüsü bildiriminde Azure kapsayıcı kayıt defterine yabancı katman başvuruları içerebilir ve bu senaryoyu çekemeyebilmelidir.

Dağıtılamayan katmanların gönderilmesini etkinleştirmek için:

  1. daemon.json Linux konaklarında ve C:\ProgramData\docker\config\daemon.json Windows Server'da /etc/docker/ bulunan dosyayı düzenleyin. Dosyanın daha önce boş olduğunu varsayarsak aşağıdaki içeriği ekleyin:

    {
      "allow-nondistributable-artifacts": ["myregistry.azsacr.<regionname>.<fqdn>"]
    }
    

    Not

    Değer, virgülle ayrılmış bir kayıt defteri adresleri dizisidir.

  2. Dosyayı kaydedin ve dosyadan çıkın.

  3. Docker'i yeniden başlatın.

Görüntüleri listedeki kayıt defterlerine gönderdiğinizde, dağıtılamayan katmanları kayıt defterine gönderilir.

Uyarı

Dağıtılamayan yapıtlar genellikle dağıtılma ve paylaşılma şekliyle ilgili kısıtlamalara sahiptir. Bu özelliği yalnızca yapıtları özel kayıt defterlerine göndermek için kullanın. Dağıtılamayan yapıtların yeniden dağıtılmasını kapsayan tüm terimlerle uyumlu olduğunuzdan emin olun.

Tanılama ve sistem durumu denetimleri

'az acr check-health' ile sistem durumunu denetleme

Yaygın ortam ve kayıt defteri sorunlarını gidermek için bkz. Azure kapsayıcı kayıt defterinin durumunu denetleme.

Docker çekme işlemi şu hatayla başarısız oluyor: net/http: bağlantı beklenirken istek iptal edildi (Client.Timeout üst bilgileri beklerken aşıldı)

  • Bu hata geçici bir sorunsa yeniden deneme başarılı olur.
  • Sürekli docker pull başarısız olursa Docker daemon'ıyla ilgili bir sorun olabilir. Docker daemon'ları yeniden başlatılarak sorun genellikle azaltılabilir.
  • Docker daemon'ı yeniden başlattıktan sonra bu sorunu görmeye devam ederseniz, sorun makineyle ilgili bazı ağ bağlantısı sorunları olabilir. Makinedeki genel ağın iyi durumda olup olmadığını denetlemek için aşağıdaki komutu çalıştırarak uç nokta bağlantısını test edin. Bu bağlantı denetimi komutunu içeren en düşük az acr sürüm 2.2.9'dır. Daha eski bir sürüm kullanıyorsanız Azure CLI'nızı yükseltin.
az acr check-health -n myRegistry
  • Tüm Docker istemci işlemlerinde her zaman bir yeniden deneme mekanizmasına sahip olmanız gerekir.

Docker çekme işlemi yavaş

Makine ağı indirme hızınızı test etmek için bu aracı kullanın.

Docker gönderimi yavaş

Makine ağı karşıya yükleme hızınızı test etmek için bu aracı kullanın.

Docker gönderimi başarılı oluyor ancak docker çekme işlemi şu hatayla başarısız oluyor: yetkisiz: kimlik doğrulaması gerekiyor

Bu hata, varsayılan olarak etkin olan --signature-verification Docker daemon'un Red Hat sürümünde oluşabilir. Aşağıdaki komutu çalıştırarak Red Hat Enterprise Linux (RHEL) veya Fedora için Docker daemon seçeneklerini kontrol edebilirsiniz:

grep OPTIONS /etc/sysconfig/docker

Örneğin, Fedora 28 Server aşağıdaki docker daemon seçeneklerine sahiptir:

OPTIONS='--selinux-enabled --log-driver=journald --live-restore'

Eksik olduğunda --signature-verification=false , docker pull aşağıdakine benzer bir hatayla başarısız olur:

Trying to pull repository myregistry.azsacr.<regionname>.<fqdn>/myimage ...
unauthorized: authentication required

Hatayı düzeltmek için:

  1. Seçeneğini --signature-verification=false Docker daemon yapılandırma dosyasına /etc/sysconfig/dockerekleyin. Örnek:

    OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'

  2. Aşağıdaki komutu çalıştırarak Docker daemon hizmetini yeniden başlatın:

    sudo systemctl restart docker.service
    

öğesini --signature-verification çalıştırarak man dockerdayrıntılarına ulaşabilirsiniz.

az acr login başarılı oluyor ancak Docker şu hatayla başarısız oluyor: yetkisiz: kimlik doğrulaması gerekiyor

Kayıt defteri kaynak adı büyük veya büyük/küçük harf gibi myRegistrykarma olsa bile, tüm docker push myregistry.azsacr.<regionname>.<fqdn>/myimage:latestküçük harfli sunucu URL'sini kullandığınızdan emin olun.

Docker daemon'unun hata ayıklama günlüklerini etkinleştirme ve alma

Seçeneğiyle debug başlayındockerd. İlk olarak, mevcut değilse Docker daemon yapılandırma dosyasını (/etc/docker/daemon.json) oluşturun ve şu debug seçeneği ekleyin:

{    
    "debug": true    
}

Ardından daemon'ı yeniden başlatın. Örneğin, Ubuntu 14.04 ile:

sudo service docker restart

Ayrıntılar Docker belgelerinde bulunabilir.

  • Günlükler, sisteminize bağlı olarak farklı konumlarda oluşturulabilir. Örneğin, Ubuntu 14.04 için şeklindedir /var/log/upstart/docker.log.
    Ayrıntılar için Docker belgelerine bakın.

  • Windows için Docker için günlükler %LOCALAPPDATA%/docker/ altında oluşturulur. Ancak, henüz tüm hata ayıklama bilgilerini içermeyebilir.

    Tam daemon günlüğüne erişmek için bazı ek adımlara ihtiyacınız olabilir:

    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
    

    Artık çalıştıran dockerdVM'nin tüm dosyalarına erişebilirsiniz. Günlük konumundadır /var/log/docker.log.

Güncelleştirmeden hemen sonra yeni kullanıcı izinleri geçerli olmayabilir

Bir hizmet sorumlusuna yeni izinler (yeni roller) verdiğinizde, değişiklik hemen geçerli olmayabilir. bunun iki olası nedeni vardır:

  • Rol atama gecikmesi Microsoft Entra. Normalde hızlıdır, ancak yayılma gecikmesi nedeniyle dakikalar sürebilir.

  • ACR belirteç sunucusunda izin gecikmesi. Bu işlem 10 dakika kadar sürebilir. Azaltmak için, 1 dakika sonra aynı kullanıcıyla yeniden kimlik doğrulaması yapabilir ve ardından kimlik doğrulaması yapabilirsiniz docker logout :

    docker logout myregistry.azsacr.<regionname>.<fqdn>
    docker login myregistry.azsacr.<regionname>.<fqdn>
    

Kimlik doğrulama bilgileri doğrudan REST API çağrılarında doğru biçimde verilmiyor

Özellikle aracı seçeneğiyle --location-Lkullanarak curl (yeniden yönlendirmeleri izlemek için) bir InvalidAuthenticationInfo hatayla karşılaşabilirsiniz. Örneğin, seçeneği ve temel kimlik doğrulaması ile kullanarak curl-L blobu getirme:

curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest

aşağıdaki yanıta neden olabilir:

<?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>

Kök neden, bazı curl uygulamaların özgün istekten üst bilgilerle yeniden yönlendirmeleri izlemesidir.

Sorunu çözmek için yeniden yönlendirmeleri üst bilgiler olmadan el ile izlemeniz gerekir. seçeneğiyle -D -curl yanıt üst bilgilerini yazdırın ve ardından ayıklayın: Location üst bilgi:

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

Azure Stack Hub portalı neden tüm depolarımı veya etiketlerimi listelemez?

Microsoft Edge/IE tarayıcısını kullanıyorsanız en fazla 100 depo veya etiket görebilirsiniz. Kayıt defterinizde 100'den fazla depo veya etiket varsa, tümünü listelemek için Firefox veya Chrome tarayıcısını kullanmanızı öneririz.

Azure Stack Hub portalı neden depoları veya etiketleri getiremiyor?

Tarayıcı, depoları veya etiketleri sunucuya getirme isteğini gönderemeyebilir. Aşağıdakiler gibi çeşitli nedenler olabilir:

  • Ağ bağlantısı eksikliği
  • Güvenlik Duvarı
  • Portalı yalnızca özel erişime izin veren bir kayıt defteri için ortak ağdan kullanma
  • Reklam engelleyicileri
  • DNS hataları

Lütfen ağ yöneticinize başvurun veya ağ yapılandırmanızı ve bağlantınızı denetleyin. az acr check-health -n yourRegistry Ortamınızın Container Registry'ye bağlanıp bağlanamadığını denetlemek için Azure CLI'nizi kullanmayı deneyin. Ayrıca, eski tarayıcı önbelleğinden veya tanımlama bilgilerinden kaçınmak için tarayıcınızda gizli veya özel bir oturum da deneyebilirsiniz.

Çekme veya gönderme isteğim neden izin verilmeyen işlemle başarısız oluyor?

İşlemlere izin verilmeyen bazı senaryolar şunlardır:

  • Görüntü veya depo, silinemez veya güncelleştirilemez şekilde kilitlenmiş olabilir. Geçerli öznitelikleri görüntülemek için az acr show repository komutunu kullanabilirsiniz.
  • Görüntü karantinadaysa bazı işlemlere izin verilmez. Karantina hakkında daha fazla bilgi edinin.
  • Kayıt defteriniz depolama sınırına ulaşmış olabilir.

Depo biçimi geçersiz veya desteklenmiyor

Depo işlemlerinde bir depo adı belirtirken "desteklenmeyen depo biçimi", "geçersiz biçim" veya "istenen veriler yok" gibi bir hata görürseniz, adın yazımını ve büyük/küçük harflerini denetleyin. Geçerli depo adları yalnızca küçük harf alfasayısal karakterler, nokta, kısa çizgi, alt çizgi ve eğik çizgi içerebilir.

Windows'da http izlemelerini Nasıl yaparım? topluyorsunuz?

Önkoşullar

Windows kapsayıcıları

Docker proxy'sini 127.0.0.1:8888 olarak yapılandırma

Linux kapsayıcıları

Docker vm sanal anahtarının ip'sini bulun:

(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress

Docker proxy'sini önceki komutun ve 8888 numaralı bağlantı noktasının çıkışına yapılandırın (örneğin, 10.0.75.1:8888)

Sonraki adımlar