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

最佳答案

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

根据注册表上的身份验证机制,您将需要添加基本身份验证信息,或者,如果使用了承载 token ,则需要对每个请求进行身份验证,请参阅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 token 实现。因此,您将需要添加基本身份验证 header 以进行curl或每个作用域的JWT token (每个意图需要2个curl请求)。

有关JWT token 认证的信息,请参见https://docs.docker.com/registry/spec/auth/jwt/

对于basic-auth,此 header 是必需的:https://github.com/EugenMayer/docker_registry_cli/blob/master/auth/BasicAuthService.rb#L27

关于curl - 如何使用curl访问docker Registry v2?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41456996/

10-09 20:30
查看更多