当我直接运行 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
。
最佳答案
如果你熟悉 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,则将带有凭据的范围参数发送到服务器:https://github.com/EugenMayer/docker_registry_cli/blob/master/requests/DockerRegistryRequest.rb#L52
它或多或少是通常的 JWT token 实现。因此,您需要将 basic-auth header 添加到 curl 或每个范围的 JWT token (每个意图需要 2 个 curl 请求)。
对于 JWT token 身份验证,另请参阅 https://docs.docker.com/registry/spec/auth/jwt/
对于基本身份验证,需要此 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/