【发布时间】:2020-01-23 07:27:26
【问题描述】:
我们有几个 Docker 存储库,由 Sonatype Nexus 服务器提供服务。
问题是我们希望从路径中为它们提供服务,而不是在不同的域上提供它们。原因很简单:配置新路径比配置新域更容易,每个子域注册和 SSL 证书。此外,还有一些安全问题。
可以吗?
【问题讨论】:
标签: docker nginx docker-compose docker-registry nexus3
我们有几个 Docker 存储库,由 Sonatype Nexus 服务器提供服务。
问题是我们希望从路径中为它们提供服务,而不是在不同的域上提供它们。原因很简单:配置新路径比配置新域更容易,每个子域注册和 SSL 证书。此外,还有一些安全问题。
可以吗?
【问题讨论】:
标签: docker nginx docker-compose docker-registry nexus3
看了一会,发现有两个步骤:登录和正常使用。
由于安装有 nginx 和 docker-compose 中的 nexus 服务器,我可以将 nexus 主机称为“nexus”,并仅通过 http 访问。 SSL证书在nginx中使用the usual nginx configuration解析
为了使登录正常工作,将路径 /v2/ 重定向到 docker 存储库非常重要。这可以通过 nginx 完成:
location /v2/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://nexus:10000;
proxy_read_timeout 90;
}
请注意,它假定 docker 存储库的 nexus 配置在内部侦听 10000 端口 (http)。
使用此配置,docker login 应该已经可以工作了,但您无法拉取任何图像。
为了访问图像,重写 URI 很重要(请将此配置放在前面显示的 /v2/ 配置上):
location ~ /v2/repository/docker-repo1/(.*) {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://nexus:10000/v2/$1;
proxy_read_timeout 90;
}
而且很容易实现,您可以创建第二个存储库,监听 10001 端口,配置如下:
location ~ /v2/repository/docker-repo2/(.*) {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://nexus:10001/v2/$1;
proxy_read_timeout 90;
}
它已经完成了。
请记住,在所有其他配置之后维护/v2/ 配置(用于登录的配置)非常重要,否则将永远无法访问。
我不确定有关授权的所有要求是否会按预期工作...如果我发现任何问题,我会更新此答案。
【讨论】: