【问题标题】:PHP cURL Access Fails to Remote Docker Hub/RegistryPHP cURL 访问远程 Docker Hub/Registry 失败
【发布时间】:2017-10-05 02:38:20
【问题描述】:

为了促进我们的应用程序的远程 CICD 过程,我正在尝试访问我们的 Docker Hub/Registry 以便能够列出、标记和推送图像。从the basics 开始,使用 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 交互?

【问题讨论】:

  • 嗨,我猜 set -e 是一个管道,如果命令或管道有错误,它会停止脚本的执行,但是 PHP 中的 curl 并不能保证管道,因为报告了很多关于此的错误CURL 上的选项,但看看是否可以添加此 CURLMOPT_PIPELINING 不确定结果。
  • 为什么将 JSON 身份验证负载转换为 HTTP 身份验证?
  • set -e 用于环境变量@headmax
  • @Sammitch 发布了答案,您正在尝试的是具有基本身份验证的网站,而不是 JSON 有效负载。
  • @Jay Blanchard 是的,并且 set -e 用于在 shell 管道上发送凭据,您可以设置 -o pipefail 来传播错误。 stackoverflow.com/questions/19622198/….

标签: php curl docker docker-registry


【解决方案1】:

这个:

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

不等于:

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

但这是:

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

它有效。

【讨论】:

  • 请忽略最后一条评论——我打错了。感谢@sammitch 的洞察力!
猜你喜欢
  • 2014-12-29
  • 2020-07-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 2012-01-16
  • 2021-11-04
相关资源
最近更新 更多