PHP cURL访问失败至远程Docker Hub /注册表

问题描述 投票:1回答:1

为了简化应用程序的远程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)

我在PHP中创建了一些cURL,试图获取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);

响应:

布尔(假)

如果我直接在浏览器的地址栏中输入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交互的很少( 实际上我几乎什么也没找到 )。 我的错误日志中没有错误。

我是否缺少明显的东西? 还是没有办法通过PHP与Docker API进行交互?

php curl docker docker-registry
1个回答
2
投票

这个:

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

不等于:

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

但这是:

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

而且有效。

© www.soinside.com 2019 - 2024. All rights reserved.