无法登录到Artifactory上的Docker注册表

无法登录到Artifactory上的Docker注册表,docker,artifactory,Docker,Artifactory,我可以通过以下方式获得代币: (base) ➜ ~ curl artifactory.example.com/artifactory/api/docker/null/v2/token -u myusername:mypassword {"token":"mytoken","expires_in":3600} 但是,当我尝试登录时: (base) ➜ ~ docker login artifactory.example.com -u

我可以通过以下方式获得代币:

(base) ➜  ~ curl artifactory.example.com/artifactory/api/docker/null/v2/token -u myusername:mypassword
{"token":"mytoken","expires_in":3600}
但是,当我尝试登录时:

(base) ➜  ~ docker login artifactory.example.com -u myusername -p mypassword
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get http://artifactory.example.com/v2/: error parsing HTTP 404 response body: invalid character '<' looking for beginning of value: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p>The requested URL /artifactory/api/docker/null/v2/token was not found on this server.</p>\n</body></html>\n"
(基本)➜  ~ docker登录artifactory.example.com-u myusername-p mypassword
警告通过CLI使用--password是不安全的。使用--password stdin。

来自守护进程的错误响应:Gethttp://artifactory.example.com/v2/: 分析HTTP 404响应正文时出错:无效字符“您的example.com是如何设置的?对我来说,这里似乎使用存储库路径作为docker访问方法。从这个错误来看,docker客户端似乎得到了一个HTML响应,而不是来自Artifactory的响应。看起来请求最初没有到达Artifactory。如果example.com上有任何反向代理,请分享?
如果可能的话,直接用IP测试它,如“docker login 12.23.34.45:8081”,并告诉我们这是否有帮助。如果登录成功,则问题在于此处使用的反向代理。共享反向代理日志并配置以查看它。

您的example.com是如何设置的?对我来说,这里似乎使用存储库路径作为docker访问方法。从这个错误来看,docker客户端似乎得到了一个HTML响应,而不是来自Artifactory的响应。看起来请求最初没有到达Artifactory。如果example.com上有任何反向代理,请分享?
如果可能的话,直接用IP测试它,如“docker login 12.23.34.45:8081”,并告诉我们这是否有帮助。如果登录成功,则问题在于此处使用的反向代理。共享反向代理日志并配置以查看它。

注册表API要求它位于url的根目录下,并且在基于路径的反向代理下无法工作。您需要将端口或主机名分配给docker API,该API响应对该主机名的
/v2
请求。Artifactory通过为您提供一个注册表API来实现这一点。

注册表API要求它位于url的根目录下,并且在基于路径的反向代理下无法工作。您需要将端口或主机名分配给docker API,该API响应对该主机名的
/v2
请求。Artifactory通过为您提供一个存储库路径来实现这一点。

是的,我使用的是存储库路径。是的,它得到了一个HTML响应/没有首先到达Artifactory。我使用Artifactory操作符在OpenShift上运行,它似乎使用Nginx反向代理。Artifactory操作符使用Nginx反向代理,就像在Artifactory.example.com->JFrog UI中一样。我选择了存储库路径而不是子域(docker.artifactory.example.com),因为我没有通配符证书,所以我尝试访问artifactory.example.com上的docker注册表,但我想它可能指向JFrog UI?那么,我需要部署第二个反向代理来位于docker注册表前面吗?是的,我使用的是存储库路径。是的,它得到了一个HTML响应/没有首先到达Artifactory。我使用Artifactory操作符在OpenShift上运行,它似乎使用Nginx反向代理。Artifactory操作符使用Nginx反向代理,就像在Artifactory.example.com->JFrog UI中一样。我选择了存储库路径而不是子域(docker.artifactory.example.com),因为我没有通配符证书,所以我尝试访问artifactory.example.com上的docker注册表,但我想它可能指向JFrog UI?那么,我是否需要部署第二个反向代理位于docker注册表前?我感到困惑,因为我已经为artifactory.example.com->JFrog UI使用了*.example.com证书的反向代理。我是否需要使用*.artifactory.example.com证书为docker.artifactory.example.com设置第二个反向代理
artifactory.example.com/v2
转到docker注册表API?如果没有,那么您需要在reverse proxy.artifactory.example.com/v2->JFrog UI/v2中添加另一个条目,而不是docker/v2-我明白了,我想我现在明白了…@atkayla在一边,如果docker注册表API在服务器中的路径下工作,那就太好了。但是其他注册中心使用的解决方案是公开不同的端口。为您提供代理配置的artifactory解决方案是非直观的。好吧,OpenShift使用Nginx反向代理部署artifactory,我不知道如何配置它。因此,我为*.artifactory.example.com部署了第二个Apache反向代理,该代理带有第二个通配符证书,仅用于Docker.artifactory.example.com上的Docker注册表,并且成功了!我很困惑,因为我已经为artifactory.example.com->JFrog用户界面设置了一个使用*.example.com证书的反向代理。我需要为docker.artifactory.example.com和*.artifactory.example.com证书设置第二个反向代理吗?
artifactory.example.com/v2
转到docker注册表API吗?如果没有,那么您需要在reverse proxy.artifactory.example.com/v2->JFrog UI/v2中添加另一个条目,而不是docker/v2-我明白了,我想我现在明白了…@atkayla在一边,如果docker注册表API在服务器中的路径下工作,那就太好了。但是其他注册中心使用的解决方案是公开不同的端口。为您提供代理配置的artifactory解决方案是非直观的。好吧,OpenShift使用Nginx反向代理部署artifactory,我不知道如何配置它。因此,我为*.artifactory.example.com部署了第二个Apache反向代理,该代理带有第二个通配符证书,仅用于Docker.artifactory.example.com上的Docker注册表,并且成功了!