我使用的是 artifactory 4.6 版,并且对 docker 注册表有以下要求。
允许匿名拉取 docker 存储库
在 SAME docker 存储库上强制进行身份验证
我知道这在更高版本的 artifactory 上是开箱即用的。然而,升级暂时不是我们的选择。
以下工作是否有效?
docker pull docker-virtual should work
docker push docker-virtual should ask for credentials
失败后,我应该可以 docker
login docker-virtual
和 docker push docker-virtual/myImage
最佳答案
不确定 Artifactory 方面,但也许以下 Docker 建议会有所帮助。
您可以在 Docker 中开始运行两个注册表,一个带有身份验证的 RW,另一个不带任何身份验证的 RO:
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/certs:/certs:ro \
-v `pwd`/auth/htpasswd:/auth/htpasswd:ro \
-v `pwd`/registry:/var/lib/registry \
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/host-cert.pem" \
-e "REGISTRY_HTTP_TLS_KEY=/certs/host-key.pem" \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=My Registry" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-e "REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry" \
registry:2
docker run -d -p 5001:5000 --restart=always --name registry-ro \
-v `pwd`/certs:/certs:ro \
-v `pwd`/auth/htpasswd:/auth/htpasswd:ro \
-v `pwd`/registry:/var/lib/registry:ro \
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/host-cert.pem" \
-e "REGISTRY_HTTP_TLS_KEY=/certs/host-key.pem" \
-e "REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry" \
registry:2
请注意每个容器中/var/lib/registry 的卷设置。然后要从匿名注册表中提取,您只需要更改端口。由于文件系统是 RO,任何推送到 5001 的尝试都将失败。
关于authentication - 在 artifactory 中匿名拉取 docker repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38310906/