Jus*_*ony 5 reverse-proxy nginx docker nginx-reverse-proxy
我想要做的就是控制顶部端点(用户将在其中登录和拉取图像的 MY_ENDPOINT。正在托管注册表和容器(DOCKER_SAAS),所以我需要的只是一个看似简单的重定向。具体来说,您通常会这样做:
docker login -u ... -p ... DOCKER_SAAS
docker pull DOCKER_SAAS/.../...
Run Code Online (Sandbox Code Playgroud)
我想允许:
docker login -u ... -p ... MY_ENDPOINT
docker pull MY_ENDPOINT/.../...
Run Code Online (Sandbox Code Playgroud)
甚至更理想的是,我更喜欢:
docker login MY_ENDPOINT
docker pull MY_ENDPOINT/.../...
Run Code Online (Sandbox Code Playgroud)
最后一项的不同之处在于端点包含用户名和密码的散列版本,它被设置到一个Authorization标题中(使用Basic) - 所以用户甚至不需要担心用户名和密码,只需担心他们的 URL。我已经尝试了一个,proxy_pass因为我们已经在为基本打包(使用 HTTPS)做了,但是失败了 404(部分是因为我们不处理 /v2 - 我还需要重定向它吗?)。这让我找到了https://docs.docker.com/registry/recipes/nginx/,但这似乎只有在您托管注册表时才有意义。我正在尝试做的甚至可能吗?
这个简单的配置适用于 GitHub 和 Amazon ECR:
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Authorization "Basic ${NGINX_AUTH_CREDENTIALS}";
proxy_pass https://registry.example.com;
}
}
Run Code Online (Sandbox Code Playgroud)
${NGINX_AUTH_CREDENTIALS}是 Docker 用于身份验证的实际哈希值的占位符。$HOME/.docker/config.json使用docker login一次后即可获取:
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Authorization "Basic ${NGINX_AUTH_CREDENTIALS}";
proxy_pass https://registry.example.com;
}
}
Run Code Online (Sandbox Code Playgroud)
由于代理注入/替换身份验证标头,因此无需使用docker login,只需使用代理地址而不是注册表地址进行拉取即可。
我40X在尝试使用以下命令测试 GitHub 代理时遇到了几个错误curl:
GET /v2/repo_name/image_name/tags/list代替使用。-XGET)尽管所有这些docker pull从一开始就完美无缺,所以我建议使用它进行测试。
location /匹配所有内容,包括/v2/,因此在代理中没有特别需要。
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |