如何使用 curl 访问 docker registry v2?

Bin*_*ing 7 registry curl docker

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

Bin*_*ing 5

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


Eug*_*yer 3

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

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

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

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

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

对于基本身份验证,需要此标头: https: //github.com/EugenMayer/docker_registry_cli/blob/master/auth/BasicAuthService.rb#L27