Bagian ini menjelaskan cara memecahkan masalah umum Container Registry dan Docker.
Project cakupan domain
Jika Anda menerima error invalid reference format
, salah satu masalahnya mungkin Anda memiliki project cakupan domain.
Jika project Anda dicakupkan ke domain, project ID akan menyertakan domain dan titik dua, misalnya: example.com:my-project
. Lihat Project cakupan domain untuk mengetahui cara menggunakan project ID yang menyertakan domain.
Error: Status 405: v1 Registry API is disabled.
Jika Anda terus-menerus mengalami error seperti "v1 Registry API is disabled" saat mengambil atau mengirim image, pastikan nama host, project ID, nama image, dan tag atau ringkasan dieja dengan benar.
Untuk melihat tag dan ringkasan gambar Anda, jalankan perintah berikut:
gcloud container images list-tags [HOSTNAME]/[PROJECT-ID]/[IMAGE]
Contoh:
gcloud container images list-tags gcr.io/my-project/my-image
Untuk mengetahui informasi selengkapnya tentang mencantumkan tag dan ringkasan gambar, lihat Mengelola Gambar.
Masalah izin
Bagian berikut menjelaskan solusi untuk masalah izin tertentu. Selalu pastikan bahwa Anda memiliki izin yang diperlukan untuk mendorong atau menarik. Lihat Izin dan peran.
Masalah izin terkait akses level bucket yang seragam
Jika Anda telah mengaktifkan akses level bucket seragam pada bucket penyimpanan yang digunakan oleh Container Registry, Anda mungkin mengalami masalah akses saat mendorong dan menarik ke Container Registry.
Untuk memperbaiki masalah akses, pastikan Anda memiliki izin yang diperlukan untuk mendorong atau menarik. Izin ini tercantum dalam Izin dan peran.
Masalah izin terkait penyiapan Docker di komputer lokal Anda
Jika Anda mengalami error permission denied
, seperti contoh berikut:
FATA[0000] Post http://var/run/docker.sock/v1.17/images/gcr.io/container-engine-docs/example/push?tag=: dial unix /var/run/docker.sock: permission denied
ERROR: (gcloud.docker) A Docker command did not run successfully.
Tried to run: 'docker push gcr.io/container-engine-docs/example'
Exit code: 1
Anda mungkin perlu menambahkan diri Anda ke grup pengguna docker
.
Jalankan perintah berikut di jendela shell atau terminal Anda:
sudo usermod -a -G docker ${USER}
Mulai ulang sistem Anda setelah menambahkan diri Anda ke grup pengguna docker
.
Masalah izin saat berkomunikasi dengan Container Registry
Jika Anda mengalami error izin seperti berikut:
Permission denied: Unable to create the repository, please check that you have access to do so
Pastikan penagihan diaktifkan untuk project Anda.
Verifikasi akses Anda:
Pastikan Anda telah diautentikasi untuk
gcloud
dengan menjalankan perintah berikut:gcloud init
Pastikan Docker dikonfigurasi untuk menggunakan
gcloud
sebagai helper kredensial Container Registry dengan menjalankan perintah berikut:gcloud auth configure-docker
Pastikan
docker-credential-gcloud
dapat dijalankan:docker-credential-gcloud list
Anda akan melihat objek JSON dengan registry target sebagai salah satu kuncinya. Misalnya:
{ "https://asia.gcr.io": "oauth2accesstoken", "https://eu.gcr.io": "oauth2accesstoken", "https://gcr.io": "oauth2accesstoken", "https://us.gcr.io": "oauth2accesstoken" }
Selanjutnya, pastikan Anda memiliki izin untuk menulis ke Cloud Storage di project yang menjadi tujuan Anda. Jika belum, minta admin untuk memberikan akses kepada pengguna Anda, lalu coba lagi.
Jika masalah terus berlanjut setelah Anda mendapatkan izin yang benar, mungkin token akses Anda diperoleh tanpa salah satu cakupan berikut:
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/devstorage.full_control
Untuk memverifikasinya, dapatkan sendiri token akses terlebih dahulu. Opsi ini bervariasi untuk setiap aplikasi. Misalnya, jika Anda menggunakan token akses dari akun layanan default Compute Engine, Anda dapat mengikuti petunjuk di sini untuk mendapatkannya.
Setelah memperoleh token akses sendiri, Anda dapat menggunakan perintah ini untuk melihat cakupan yang digunakan untuk mendapatkan token akses:
curl -H "Authorization: Bearer <your access token>" https://www.googleapis.com/oauth2/v1/tokeninfo
Jika cakupan yang disebutkan tidak disertakan, perbaiki masalahnya dan pastikan untuk menyertakannya saat mendapatkan token akses dalam kode Anda. Misalnya, untuk token yang dibuat khusus untuk akun layanan default di virtual machine Compute Engine, Anda harus memperbaiki setelan cakupan untuk virtual machine tersebut dan membuatnya kembali.
Masalah izin saat mendorong dan mengambil gambar
Instance VM yang mengirim atau mengambil image harus dikonfigurasi dengan benar menggunakan cakupan akses dan izin IAM yang diperlukan agar dapat mengakses bucket penyimpanan Container Registry. Untuk mengetahui informasi tentang setelan yang diperlukan, lihat Menggunakan Container Registry dengan Google Cloud.
Error ImagePullBackoff dari Google Kubernetes Engine
GKE menampilkan error ImagePullBackoff
jika tidak dapat mengambil image dari registry. Error ini mungkin terjadi karena gambar tidak dapat ditemukan atau karena node Anda tidak memiliki izin untuk mengambil dari registry. Secara default, node GKE memiliki izin untuk mengambil image dari Container Registry saat registry berada dalam project Google Cloud yang sama dengan node Anda.
Dokumentasi GKE mencakup langkah-langkah untuk mengidentifikasi akar penyebab dan menyelesaikan masalah.
Penegakan kebijakan organisasi
Batasan kebijakan organisasi dapat memengaruhi penggunaan Container Registry saat diterapkan ke layanan yang digunakan Container Registry, termasuk batasan yang mengharuskan penggunaan kunci enkripsi yang dikelola pelanggan (CMEK).
Error Permintaan Buruk saat mengirim gambar
Saat Cloud Storage API tercantum dalam daftar kebijakan Deny
untuk batasan constraints/gcp.restrictNonCmekServices
, Anda tidak dapat mengirim gambar ke Container Registry jika bucket penyimpanan yang mendasarinya tidak dienkripsi dengan CMEK. Pesan berikut ditampilkan:
unknown: Bad Request
Jika constraints/gcp.restrictCmekCryptoKeyProjects
dikonfigurasi, bucket penyimpanan harus dienkripsi dengan Bigtable dari project, folder, atau organisasi yang diizinkan. Bucket yang ada dan tidak mematuhi kebijakan harus dikonfigurasi untuk menggunakan kunci yang diperlukan secara default.
Untuk mengenkripsi bucket penyimpanan, lihat petunjuk Cloud Storage. Nama bucket untuk host registry memiliki salah satu format berikut:
artifacts.PROJECT-ID.appspot.com
untuk gambar yang disimpan digcr.io
hostSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
untuk gambar yang disimpan diasia.gcr.io
,eu.gcr.io
, atauus.gcr.io
.
Topik Pub/Sub gcr tidak dibuat secara otomatis
Saat Anda mengaktifkan Container Registry API di project Google Cloud, Container Registry akan mencoba membuat topik Pub/Sub secara otomatis dengan ID topik gcr
menggunakan kunci enkripsi yang dikelola Google.
Jika Pub/Sub API ada dalam daftar kebijakan Deny
untuk
batasan constraints/gcp.restrictNonCmekServices
, topik harus dienkripsi
dengan CMEK. Permintaan untuk membuat topik tanpa enkripsi CMEK akan gagal.
Untuk membuat topik gcr
dengan enkripsi CMEK, lihat
petunjuk untuk mengenkripsi topik Pub/Sub.
Batas Kuota
Jika melebihi batas kuota Container Registry, Anda mungkin melihat pesan error seperti ini:
Error: Status 429 trying to pull repository [...] "Quota Exceeded."
Agar tidak melebihi batas kuota tetap, Anda dapat:
- Meningkatkan jumlah alamat IP yang terhubung dengan Container Registry. Kuota adalah per alamat IP.
- Tambahkan percobaan ulang yang menyebabkan penundaan. Misalnya, Anda dapat menggunakan backoff eksponensial.
Endpoint registry tidak valid dengan boot2docker
Jika Anda mengalami masalah saat menjangkau Container Registry dari lingkungan boot2docker:
docker push gcr.io/example/sample
Error response from daemon: invalid registry endpoint https://gcr.io/v0/:
unable to ping registry endpoint https://gcr.io/v0/
v2 ping attempt failed with error: Get https://gcr.io/v2/:
x509: certificate has expired or is not yet valid
v1 ping attempt failed with error: Get https://gcr.io/v1/_ping:
x509: certificate has expired or is not yet valid.
If this private registry supports only HTTP or HTTPS with an unknown CA
certificate, please add `--insecure-registry gcr.io` to the daemon's
arguments. In the case of HTTPS, if you have access to the registry's CA
certificate, no need for the flag; simply place the CA certificate at
/etc/docker/certs.d/gcr.io/ca.crt
Anda mungkin perlu memulai ulang boot2docker:
boot2docker stop
boot2docker start
Error saat mengirim image tingkat root
Saat Anda mencoba mengirim image container, push tersebut akan gagal dengan pesan yang menyertakan:
Pushing to root-level images is disabled
Pesan ini menunjukkan bahwa Anda sudah memberi tag pada gambar dengan nama host dan gambar, tetapi tidak menyertakan project ID.
Beri tag pada gambar menggunakan format jalur gambar yang benar:
HOSTNAME/PROJECT-ID/IMAGE:TAG
Misalnya: gcr.io/web-project/web-app:1.0
.
Docker di Mac
Jika mengalami masalah dengan Docker di Mac, Anda mungkin perlu mencoba solusi. Error dapat mencakup operasi push/pull Docker yang tidak responsif, atau error jaringan yang mirip dengan berikut ini:
Post https://us.gcr.io/v2/[repo name]/blobs/uploads/: dial tcp xx.xxx.xx.xx:xxx: i/o timeout
Jika Anda mengalami error ini, coba langkah-langkah berikut:
Jalankan perintah
docker-machine restart default
di terminal Mac untuk memulai ulang daemon Docker.Pastikan "Simpan login docker dengan aman di keychain macOS" tidak diaktifkan di menu Preferensi Docker.
Pastikan Anda menjalankan Docker versi terbaru.