Сбой доступа PHP cURL к удаленному Docker Hub / Registry

Чтобы облегчить удаленный процесс CICD для наших приложений, я пытаюсь получить доступ к нашему Docker Hub / Registry, чтобы иметь возможность просматривать, маркировать и отправлять изображения. Начиная с основы используя следующее из скрипта bash:

TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${UNAME}'", "password": "'${UPASS}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)

Я создал несколько cURL в PHP, пытаясь получить токен для Docker Hub:

$user = 'xxxxxxxx';
$pass = 'xxxxxxxx';
$namespace = 'xxxxxxxx';
$headers = array();
$headers[] = 'Content-Type: application/json';

$url = "https://hub.docker.com/v2/users/login/";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

$return = curl_exec($ch);
curl_close ($ch);

var_dump($return);

Ответ:

BOOL (ложь)

Если я введу URL https://regsitry.hub.docker.com/v2/users/login/ прямо в адресную строку браузера я получаю:

{"username": ["This field is required."], "password": ["This field is required."]}

Если я исключу имя пользователя и пароль из запроса cURL, я все равно получу bool(false) ответ. Там очень мало (на самом деле я почти ничего не нашел) для использования PHP для взаимодействия с Docker Hub / Registry API. В моих журналах ошибок нет ошибок.

Я что-то упускаю из виду? Или нет способа взаимодействовать с Docker API через PHP?

1

Решение

Это:

curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");

не эквивалентно:

-d '{"username": "'${UNAME}'", "password": "'${UPASS}'"}'

но это:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['username'=>$user, 'password'=>$pass]));

и это работает.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]