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 karena
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 mengalami error seperti "v1 Registry API dinonaktifkan" saat menarik atau mendorong image, pastikan nama host, project ID, nama image, dan tag atau ringkasan Anda dieja dengan benar.
Untuk melihat tag dan ringkasan image, 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 cara mencantumkan tag dan ringkasan gambar, lihat Mengelola Gambar.
Masalah izin
Bagian berikut menjelaskan solusi untuk masalah izin tertentu. Selalu pastikan Anda memiliki izin yang diperlukan untuk melakukan push atau pull. Lihat Izin dan peran.
Masalah izin terkait akses level bucket yang seragam
Jika telah mengaktifkan akses level bucket seragam di bucket penyimpanan yang digunakan oleh Container Registry, Anda mungkin mengalami masalah akses saat melakukan push dan pull ke Container Registry.
Untuk memperbaiki masalah akses, pastikan Anda memiliki izin yang diperlukan untuk melakukan push atau pull. Izin ini tercantum di 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 shell atau jendela terminal:
sudo usermod -a -G docker ${USER}
Mulai ulang sistem 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 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 dieksekusi: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 Anda kirim. Jika tidak, minta admin untuk memberikan akses kepada pengguna Anda, lalu coba lagi.
Jika masalah berlanjut setelah Anda memiliki 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 token akses sendiri terlebih dahulu. Hal ini bervariasi dari aplikasi ke aplikasi, misalnya jika Anda menggunakan token akses dari akun layanan default Compute Engine, Anda dapat mengikuti petunjuk di sini untuk mendapatkannya.
Setelah mendapatkan token akses sendiri, Anda dapat menggunakan perintah ini untuk melihat cakupan yang digunakan dalam 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 untuk memastikan untuk menyertakannya saat mendapatkan token akses dalam kode Anda. Misalnya, untuk token yang dihasilkan secara khusus untuk akun layanan default di virtual machine Compute Engine, Anda harus memperbaiki setelan cakupan untuk virtual machine tersebut dan membuatnya ulang.
Masalah izin saat mengirim dan mengambil image
Instance VM yang mendorong atau menarik image harus dikonfigurasi dengan benar dengan izin IAM dan cakupan akses yang diperlukan untuk 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
saat tidak dapat mengambil
image dari registry. Error mungkin terjadi karena image 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 jika registry berada di project Google Cloud yang sama dengan node Anda.
Dokumentasi GKE menyertakan langkah-langkah untuk mengidentifikasi penyebab utama dan menyelesaikan masalah.
Penegakan kebijakan organisasi
Batasan kebijakan organisasi dapat memengaruhi penggunaan Container Registry jika berlaku untuk layanan yang digunakan Container Registry, termasuk batasan yang mewajibkan penggunaan kunci enkripsi yang dikelola pelanggan (CMEK).
Error Permintaan Tidak Valid saat mendorong gambar
Jika Cloud Storage API ada dalam daftar kebijakan Deny
untuk batasan constraints/gcp.restrictNonCmekServices
, Anda tidak dapat mendorong image ke Container Registry jika bucket penyimpanan yang mendasarinya tidak dienkripsi dengan CMEK. Pesan berikut akan ditampilkan:
unknown: Bad Request
Saat constraints/gcp.restrictCmekCryptoKeyProjects
dikonfigurasi, bucket penyimpanan harus dienkripsi dengan CryptoKey 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 di hostgcr.io
STORAGE-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 dengan ID topik gcr
secara otomatis 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."
Untuk menghindari melebihi batas kuota tetap, Anda dapat:
- Meningkatkan jumlah alamat IP yang berkomunikasi dengan Container Registry. Kuota ditetapkan per alamat IP.
- Menambahkan 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 mendorong gambar tingkat root
Saat Anda mencoba melakukan push pada image penampung, push akan gagal dengan pesan yang menyertakan:
Pushing to root-level images is disabled
Pesan ini menunjukkan bahwa Anda memberi tag pada gambar dengan nama host dan image, 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:
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.