我如何从一个URL访问多个Artifactory Docker存储库?
可以通过这样的方式配置反向代理,即可以用存储库名称标记映像,并且反向代理可以将此类请求路由到适当的Artifactory Docker存储库。
子域方法解决方案
最好的解决办法是利用我们现有的资源子域法以及我们生成的反向代理配置。此方法确实需要通配符证书,如果无法获得通配符证书,则可以使用下面描述的替代解决方案和单个URL证书。
可选择的解决方案
另一种解决方案是在映像名称中嵌入存储库名称,而不是注册中心URL。
然后工作流看起来像这样:Docker标签Docker push 这将导致在Artifactory存储库< optional-namespace > / <图像名称>。下面是一个更具体的例子:
Docker标签busybox example.com/dockerv2/busybox
Docker push example.com/dockerv2/busybox
要求:
Apache 2.4 +
看到Apache所需的模块
实现
- 创建一个名为docker-login的本地docker存储库
- 用您的详细信息修改VirtualHost条目(替换所有
-共有15个) - 应用Apache配置并重启Apache
听着<端口# >
< VirtualHost *: <端口# > >
ProxyPreserveHost上
ServerName < apache-server-name >
服务器server@admin
SSLEngine上
SSLCertificateFile < cert-file-location >
SSLCertificateKeyFile < cert-key-file-location >
RewriteEngine上
rewritecsecond %{SERVER_PORT} (.*)
rewriterrule (.*) - [E=my_server_port:%1]
rewritecsecond %{REQUEST_SCHEME} (.*)
rewriterrule (.*) - [E=my_scheme:%1]
rewritecsecond %{HTTP_HOST} (.*)
rewriterrule (.*) - [E=my_custom_host:%1]
rewritecsecond "%{REQUEST_URI}" "^/v2/(.*?)/"
RewriteRule“^ / v2 /.*?/(.*)$" "/ api /码头工人/ % 1 / v2 / 1美元”(PT, E =回购:% 1)
^/v2/$ /artifactory/api/docker/docker-login/v2/ [P]
^/v2/token$ /artifactory/api/docker/docker-login/v2/token [P]
RequestHeader set Host /%{repo}e
请求头设置X-Forwarded-Port %{my_server_port}
请求头设置x - forward - proto %{my_scheme}e
//:
ProxyPassReverseCookiePath /artifactory /
页眉编辑*位置”^ https:// < apache-server-name > / (. * ?) / v2 /(. *) $”“https:// < apache-server-name >: <端口# > / v2 / 1 / 2美元”
ProxyRequests掉
ProxyPass /
ProxyPassReverse /
< /虚拟主机>
示例(代理端口:5000,apache-server-name: jfrog-docker, art-URL: http://192.168.99.100:8081):)
听5000
< VirtualHost *: 5000 >
ProxyPreserveHost上
ServerName jfrog-docker.com
服务器server@admin
SSLEngine上
SSLCertificateFile /etc/ssl/demo.pem
SSLCertificateKeyFile /etc/ssl/demo.key
RewriteEngine上
rewritecsecond %{SERVER_PORT} (.*)
rewriterrule (.*) - [E=my_server_port:%1]
rewritecsecond %{REQUEST_SCHEME} (.*)
rewriterrule (.*) - [E=my_scheme:%1]
rewritecsecond %{HTTP_HOST} (.*)
rewriterrule (.*) - [E=my_custom_host:%1]
rewritecsecond "%{REQUEST_URI}" "^/v2/(.*?)/"
RewriteRule“^ / v2 /.*?/(.*)$" "/ api /码头工人/ % 1 / v2 / 1美元”(PT, E =回购:% 1)
rewriterrule ^/v2/$ http://192.168.99.100:8081/artifactory/api/docker/docker-login/v2/ [P]
rewriterrule ^/v2/token$ http://192.168.99.100:8081/artifactory/api/docker/docker-login/v2/token [P]
请求头设置主机jfrog-docker.com/%{repo}e
请求头设置X-Forwarded-Port %{my_server_port}
请求头设置x - forward - proto %{my_scheme}e
请求头设置x - artifactory - overrides - base - url %{my_scheme}e:// jfrogdocker.com:5000
ProxyPassReverseCookiePath /artifactory /
页眉编辑*位置”^ https://jfrog-docker.com/ (. * ?) / v2 /(. *) $”“https://jfrog-docker.com: 5000 / v2 / 1 / 2美元”
ProxyRequests掉
ProxyPass / http://192.168.99.100:8081/artifactory/
ProxyPassReverse / http://192.168.99.100:8081/artifactory/
< /虚拟主机>
关于权限和存储库docker-login的说明:
需要使用存储库docker-login来允许用户登录。登录只需要一次,并将提供标识登录的特定用户的令牌。然后,无论用户从哪个存储库推送或提取,都会提供这个令牌。这些拉/推请求将遵循用户对这些特定存储库的权限,而不是对存储库docker-login的权限,因此权限将按预期工作。
