如何使用curl访问docker registry v2?

时间:2017-01-04 05:48:38

标签: curl docker registry

当我直接运行docker run -d -p 5000:5000 --restart=always --name registry registry:2时,我可以使用curl localhost:5000/v2/_catalog访问注册表。但在我使用TLS引用https://docs.docker.com/registry/deploying/来保护注册表之后。像curl localhost:5000/v2/_catalog这样的命令无法使用。那我怎么能用curl访问注册表?是否应该添加一些选项?就像我想使用docker remote api一样,我可以使用curl --insecure --cert ~/cert.pem --key ~/key.pem https://$host:2376/_ping

2 个答案:

答案 0 :(得分:2)

如果您熟悉httpparty / ruby​​,可以查看此实现:https://github.com/EugenMayer/docker_registry_cli/blob/master/requests/DockerRegistryRequest.rb

根据您在注册表中使用的身份验证机制,您需要添加基本身份验证信息,或者,如果使用了承载令牌,则需要对每个请求进行身份验证,请参阅https://github.com/EugenMayer/docker_registry_cli/tree/master/auth

这意味着,首先发送GET请求,如果获得401,则将带有凭据的scope参数发送到服务器:https://github.com/EugenMayer/docker_registry_cli/blob/master/requests/DockerRegistryRequest.rb#L52

它或多或少是通常的JWT令牌实现。因此,您需要为每个范围添加基本身份验证标头或每个范围的JWT令牌(每个意图需要2个卷曲请求)。

对于JWT令牌身份验证,请参阅https://docs.docker.com/registry/spec/auth/jwt/

对于basic-auth,需要此标头:https://github.com/EugenMayer/docker_registry_cli/blob/master/auth/BasicAuthService.rb#L27

答案 1 :(得分:-1)

curl --cacert domain.crt https://myregistry.com:5000/v2/_catalog这样的卷曲会起作用。