Tôi muốn tải xuống thủ công một hình ảnh Docker từ Docker Hub . Cụ thể hơn, tôi muốn tải xuống Docker Image từ Docker Hub trên máy trong môi trường hạn chế không cài đặt phần mềm máy khách Docker. Tôi đã nghĩ rằng điều này sẽ có thể sử dụng API chính thức , nhưng điều này dường như không xảy ra - xem cuộc thảo luận sau:
Có thực sự là trường hợp API không hỗ trợ tải xuống hình ảnh? Có cách nào để làm việc này?
CẬP NHẬT 1:
Tôi đã xem qua bài đăng ServerFault sau:
Các giải pháp được chấp nhận sử dụng các docker save
lệnh, mà không giúp gì trong hoàn cảnh của tôi. Nhưng một giải pháp khác được đăng ở đó trích dẫn bài đăng StackOverflow sau đây:
Một trong những giải pháp ở đó đề cập đến một công cụ dòng lệnh gọi là docker-registry-debug , trong số những thứ khác, có thể tạo ra một curl
lệnh để tải xuống một hình ảnh. Đây là những gì tôi nhận được:
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
Thật không may, có vẻ như curl
lệnh được tạo ra không hoạt động.
CẬP NHẬT 2:
Có vẻ như tôi có thể tải xuống các đốm màu từ Docker Hub. Đây là cách tôi đang diễn ra về nó.
Nhận mã thông báo ủy quyền:
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' \
)"
Kéo một bảng kê khai hình ảnh:
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq '.'
Kéo một bảng kê khai hình ảnh và trích xuất các khoản tiền blob:
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
Tải xuống một blob một lớp và ghi nó vào một tệp:
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"
Viết tất cả các khoản tiền blob vào một tập tin:
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
Tải xuống tất cả các đốm màu từ bảng kê khai:
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
Bây giờ tôi có một loạt các đốm màu và tôi cần kết hợp lại chúng thành một hình ảnh - tôi nghĩ vậy.
Liên kết liên quan:
Diễn đàn cộng đồng Docker: Tải xuống thủ công hình ảnh Docker Hub
Sự cố Docker # 1016: Tìm nạp hình ảnh docker mà không có lệnh docker. ví dụ với wget
ServerFault: Tải xuống hình ảnh docker để chuyển sang máy không kết nối internet
StackOverflow: Tải xuống hình ảnh docker để chuyển sang máy không kết nối internet
StackOverflow: Làm thế nào để tải xuống hình ảnh docker mà không cần sử dụng lệnh pull?
StackOverflow: URL đăng ký chính thức của Docker (Docker Hub)