Чтобы облегчить удаленный процесс 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?
Это:
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
не эквивалентно:
-d '{"username": "'${UNAME}'", "password": "'${UPASS}'"}'
но это:
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['username'=>$user, 'password'=>$pass]));
и это работает.
Других решений пока нет …