Saya ingin mengunduh secara manual Gambar Docker dari Docker Hub . Lebih khusus lagi, saya ingin mengunduh Gambar Docker dari Docker Hub pada mesin di lingkungan terbatas yang tidak (dan tidak bisa) menginstal perangkat lunak klien Docker. Saya akan berpikir bahwa ini akan mungkin menggunakan API resmi , tetapi ini tampaknya bukan kasusnya - lihat diskusi berikut:
Benarkah API tidak mendukung pengunduhan gambar? Apakah ada cara untuk mengatasi ini?
PEMBARUAN 1:
Saya menemukan posting ServerFault berikut:
The solusi yang diterima menggunakan docker save
perintah, yang tidak membantu dalam situasi saya. Tetapi solusi lain yang diposting di sana mengutip posting StackOverflow berikut:
Salah satu solusi yang ada mengacu pada alat baris perintah yang disebut docker-registry-debug yang, antara lain, dapat menghasilkan curl
perintah untuk mengunduh gambar. Inilah yang saya dapat:
user@host:~$ docker-registry-debug curlme docker ubuntu
# Reading user/passwd from env var "USER_CREDS"
# No password provided, disabling auth
# Getting token from https://index.docker.io
# Got registry endpoint from the server: https://registry-1.docker.io
# Got token: signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read
curl -i --location-trusted -I -X GET -H "Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read" https://registry-1.docker.io/v1/images/ubuntu/layer
user@host:~$ curl \
-i --location-trusted -I -X GET \
-H "Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read"
https://registry-1.docker.io/v1/images/ubuntu/layer
HTTP/1.1 404 NOT FOUND
Server: gunicorn/18.0
Date: Wed, 29 Nov 2017 01:00:00 GMT
Expires: -1
Content-Type: application/json
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 29
X-Docker-Registry-Version: 0.8.15
X-Docker-Registry-Config: common
Strict-Transport-Security: max-age=31536000
Jadi sayangnya sepertinya curl
perintah yang dihasilkan tidak berfungsi.
PEMBARUAN 2:
Sepertinya saya dapat mengunduh layer gumpalan dari Docker Hub. Ini adalah bagaimana saya saat ini akan melakukannya.
Dapatkan token otorisasi:
user@host:~$ export TOKEN=\
"$(curl \
--silent \
--header 'GET' \
"https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" \
| jq -r '.token' \
)"
Tarik manifes gambar:
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq '.'
Tarik manifes gambar dan ekstrak jumlah gumpalan:
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq -r '.fsLayers[].blobSum'
sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
sha256:be588e74bd348ce48bb7161350f4b9d783c331f37a853a80b0b4abc0a33c569e
sha256:e4ce6c3651b3a090bb43688f512f687ea6e3e533132bcbc4a83fb97e7046cea3
sha256:421e436b5f80d876128b74139531693be9b4e59e4f1081c9a3c379c95094e375
sha256:4c7380416e7816a5ab1f840482c9c3ca8de58c6f3ee7f95e55ad299abbfe599f
sha256:660c48dd555dcbfdfe19c80a30f557ac57a15f595250e67bfad1e5663c1725bb
Unduh satu lapisan gumpalan dan tulis ke file:
user@host:~$ BLOBSUM=\
"sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
user@host:~$ curl \
--silent \
--location \
--request GET \
--header "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}" \
> "${BLOBSUM/*:/}.gz"
Tulis semua jumlah gumpalan ke file:
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq -r '.fsLayers[].blobSum' > ubuntu-blobsums.txt
Unduh semua gumpalan layer dari manifes:
user@host:~$ while read BLOBSUM; do
curl \
--silent \
--location \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}" \
> "${BLOBSUM/*:/}.gz"; \
done < blobsums.txt
Sekarang saya memiliki banyak gumpalan layer dan saya perlu menggabungkannya kembali menjadi gambar - saya pikir.
Tautan yang berhubungan:
Jawaban:
Jadi ternyata Proyek Moby memiliki skrip shell pada Moby Github yang dapat mengunduh gambar dari Docker Hub dalam format yang dapat diimpor ke Docker:
Sintaks penggunaan untuk skrip diberikan oleh yang berikut:
Gambar kemudian dapat diimpor dengan
tar
dandocker load
:Untuk memverifikasi bahwa skrip berfungsi seperti yang diharapkan, saya mengunduh gambar Ubuntu dari Docker Hub dan memuatnya ke Docker:
Dalam praktiknya saya harus menyalin data dari klien internet (yang tidak memiliki Docker diinstal) ke mesin target / tujuan (yang tidak memiliki Docker diinstal):
dan kemudian memuat dan menggunakan gambar pada host target:
sumber
The machine with internet connectivity does not and cannot have Docker installed
. tetapi Anda melamardocker load
Ada alat yang disebut Skopeo yang dapat mengambil gambar Docker dari repositori dan menyimpannya dalam beberapa format.
Sebagai contoh:
Unduh gambar dan simpan layer sebagai tarball:
skopeo copy docker://ubuntu docker-archive:/tmp/ubuntu.tar:ubuntu
Transfer
/tmp/ubuntu.tar
ke mesin lain jika diinginkan.Memuat gambar pada instance Docker yang tidak memiliki koneksi internet:
docker load --input /tmp/ubuntu.tar
Ini tersedia dalam repo CentOS 7 dengan nama paket
skopeo
. Tidak ada paket Debian atau Ubuntu saat ini (tetapi mudah dikompilasi).sumber
terima kasih untuk motivasi. Saya membuat versi PowerShell. Lihat ... Dengan itu Anda dapat memindahkan wadah dockerhub ke jaringan buruh pelabuhan terbatas dengan desktop windows dan alat ssh-scp ke mesin buruh pelabuhan tanpa hak root atau administrator
https://gitlab.com/Jancsoj78/dockerless_docker_downloader alat hacker baru :)
sumber
Bagi saya tidak sepenuhnya jelas apa yang ingin Anda capai dan mengapa upaya tersebut bukan solusi untuk masalah tersebut. Jika saya perlu menyelesaikan masalah ini, saya ingin @Tensibai dan Tanya Jawab lainnya seperti yang ditunjukkan, lakukan docker pull pada sistem dengan konektivitas internet, simpan gambar buruh pelabuhan, salin ke mesin tanpa konektivitas internet, muat gambar dan jalankan .
Demonstrasi
Tidak ada gambar di sistem A:
Tarik gambar dari dockerhub:
Simpan gambar buruh pelabuhan:
Salin gambar buruh pelabuhan ke systemB dan muat.
sumber
Berikut ini adalah skrip python yang diadaptasi, sehingga memiliki solusi independen OS: docker-drag
Gunakan seperti itu, dan itu akan membuat arsip TAR yang dapat Anda impor menggunakan beban buruh pelabuhan:
sumber
{}
(kode) di bilah atas editor untuk memformatnya.