curl --request POST \
--url https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prefix": "hub",
"upstream_registry": "docker.io",
"upstream_prefix": "library",
"upstream_username": "<string>",
"upstream_secret": "<string>"
}
'import requests
url = "https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules"
payload = {
"prefix": "hub",
"upstream_registry": "docker.io",
"upstream_prefix": "library",
"upstream_username": "<string>",
"upstream_secret": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prefix: 'hub',
upstream_registry: 'docker.io',
upstream_prefix: 'library',
upstream_username: '<string>',
upstream_secret: '<string>'
})
};
fetch('https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'prefix' => 'hub',
'upstream_registry' => 'docker.io',
'upstream_prefix' => 'library',
'upstream_username' => '<string>',
'upstream_secret' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules"
payload := strings.NewReader("{\n \"prefix\": \"hub\",\n \"upstream_registry\": \"docker.io\",\n \"upstream_prefix\": \"library\",\n \"upstream_username\": \"<string>\",\n \"upstream_secret\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prefix\": \"hub\",\n \"upstream_registry\": \"docker.io\",\n \"upstream_prefix\": \"library\",\n \"upstream_username\": \"<string>\",\n \"upstream_secret\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prefix\": \"hub\",\n \"upstream_registry\": \"docker.io\",\n \"upstream_prefix\": \"library\",\n \"upstream_username\": \"<string>\",\n \"upstream_secret\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"pull_through_cache_rule": {
"crn": "crn:registry:sa-saopaulo-1:my-account:pull-through-cache-rule/hub",
"prefix": "hub",
"uri_prefix": "cr.sa-saopaulo-1.basaltic.cloud/my-account/hub",
"upstream_registry": "registry-1.docker.io",
"has_credential": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"upstream_prefix": "library",
"upstream_username": "robot"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Crear regla de caché de imágenes
Asocia un prefijo de la cuenta a un registry de origen. Use prefix igual a hub, upstream_registry igual a docker.io y upstream_prefix igual a library para obtener cr.sa-saopaulo-1.basaltic.cloud/my-account/hub/nginx:1.27.
La caché reduce pulls repetidos y el consumo de los límites de Docker Hub por IP. Las credenciales autenticadas pueden aumentar ese límite. Crear la regla no copia imágenes: repositorios y contenido se crean en el primer pull sin caché.
Una búsqueda en el origen exige registry:BatchImportUpstreamImage además de los permisos de pull, ya que consume almacenamiento. Los clientes con solo pull reciben 404 cuando la imagen no está en caché. El prefijo no puede contener repositorios preexistentes. Requiere registry:CreatePullThroughCacheRule.
curl --request POST \
--url https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prefix": "hub",
"upstream_registry": "docker.io",
"upstream_prefix": "library",
"upstream_username": "<string>",
"upstream_secret": "<string>"
}
'import requests
url = "https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules"
payload = {
"prefix": "hub",
"upstream_registry": "docker.io",
"upstream_prefix": "library",
"upstream_username": "<string>",
"upstream_secret": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prefix: 'hub',
upstream_registry: 'docker.io',
upstream_prefix: 'library',
upstream_username: '<string>',
upstream_secret: '<string>'
})
};
fetch('https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'prefix' => 'hub',
'upstream_registry' => 'docker.io',
'upstream_prefix' => 'library',
'upstream_username' => '<string>',
'upstream_secret' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules"
payload := strings.NewReader("{\n \"prefix\": \"hub\",\n \"upstream_registry\": \"docker.io\",\n \"upstream_prefix\": \"library\",\n \"upstream_username\": \"<string>\",\n \"upstream_secret\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prefix\": \"hub\",\n \"upstream_registry\": \"docker.io\",\n \"upstream_prefix\": \"library\",\n \"upstream_username\": \"<string>\",\n \"upstream_secret\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://registry.{region}.basaltic.sh/v1/pull-through-cache-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prefix\": \"hub\",\n \"upstream_registry\": \"docker.io\",\n \"upstream_prefix\": \"library\",\n \"upstream_username\": \"<string>\",\n \"upstream_secret\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"pull_through_cache_rule": {
"crn": "crn:registry:sa-saopaulo-1:my-account:pull-through-cache-rule/hub",
"prefix": "hub",
"uri_prefix": "cr.sa-saopaulo-1.basaltic.cloud/my-account/hub",
"upstream_registry": "registry-1.docker.io",
"has_credential": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"upstream_prefix": "library",
"upstream_username": "robot"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}registry:CreatePullThroughCacheRule. Consulte REGISTRY permisos para la lista completa, el alcance de cada acción y un ejemplo de política.Autorizaciones
Un token bearer de OAuth 2.0, enviado como Authorization: Bearer <token>. Esta es la forma recomendada de autenticación.
Obtén el token intercambiando el par de claves de acceso de una cuenta de servicio en POST /v1/oauth/token con grant_type=client_credentials. Es el flujo estándar de credenciales de cliente; las bibliotecas compatibles con OAuth pueden obtener y renovar el token por ti.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Los tokens duran una hora por defecto. El mismo par de claves de acceso también sirve como credencial AWS SigV4 para el endpoint de objetos compatible con S3, que solo acepta ese método de autenticación.
Encabezados
Clave opcional generada por el cliente que hace que una creación sea segura para la reproducción. Al volver a intentar una solicitud con la misma clave, se devuelve el resultado original literalmente en lugar de crear un recurso duplicado. Se rechaza la reutilización de una clave con un cuerpo de solicitud diferente (422); una solicitud cuya clave todavía se está procesando devuelve 409. Los registros se mantienen durante 24 horas. Usa un UUID o un token único similar.
255Cuerpo
Uno o dos componentes en minúsculas de nombre de repositorio. Forman el inicio de la ruta de todos los repositorios creados por la regla.
"hub"
Hostname con puerto opcional. Se acepta y elimina el prefijo https://; se rechazan otros esquemas porque la conexión puede transportar credenciales.
"docker.io"
Ruta opcional añadida antes del nombre en el origen.
"library"
Opcional. Autenticarse en Docker Hub puede aumentar los límites de pull incluso para imágenes públicas.
Contraseña o token de solo escritura, cifrado en reposo y nunca devuelto. Obligatorio junto con upstream_username; se rechazan credenciales parciales.
Respuesta
Regla creada. No se ha obtenido contenido.
Show child attributes
Show child attributes

