Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 401“;“需要认证”;港口复制_Docker_Registry_Harbor - Fatal编程技术网

Docker 401“;“需要认证”;港口复制

Docker 401“;“需要认证”;港口复制,docker,registry,harbor,Docker,Registry,Harbor,我已经使用vmware harbor v1.5.0部署了一个私有docker注册表。虽然它可以用于大多数功能,例如登录和拉/推映像,但当我尝试使用[administration]->[replications]时,总是会出现“需要验证”错误 以下是港口复制错误详细信息: 2018-08-06T06:57:41Z[信息]初始化完成:存储库:操作/测试,标记:[3.4.11],源注册表:URL-不安全真,目标注册表:URL-不安全假 2018-08-06T06:57:41Z[警告]在目标注册表上创建

我已经使用vmware harbor v1.5.0部署了一个私有docker注册表。虽然它可以用于大多数功能,例如登录和拉/推映像,但当我尝试使用[administration]->[replications]时,总是会出现“需要验证”错误

以下是港口复制错误详细信息

2018-08-06T06:57:41Z[信息]初始化完成:存储库:操作/测试,标记:[3.4.11],源注册表:URL-不安全真,目标注册表:URL-不安全假

2018-08-06T06:57:41Z[警告]在目标注册表上创建项目操作时,状态代码为409,请尝试执行下一步

2018-08-06T06:57:41Z[错误][job_logger.go:81]:从源注册表中提取ops/zookeeper:3.4.11的清单时出错:401{“错误”:[{“代码”:“未经授权”,“消息”:“需要身份验证”,“详细信息”:[{“类型”:“存储库”,“类”:“,“名称”:“ops/test”,“操作”:“提取”}]


如上所述,未经授权的错误似乎是由于从本地拉取映像而发生的,而不是由于远程。事实上,远程注册表已通过[administration]->[registries]创建页面中的“测试连接”

我想知道,是否应该设置一些特定的配置来使用复制功能?从本地提取图像时使用了哪个角色


因此,我尝试阅读harbor源代码,并在第230行中找到错误消息引发点:

acceptMediaTypes:=[]字符串{schema1.MediaTypeManifest,schema2.MediaTypeManifest}
摘要,mediaType,负载,错误:=t.srcRegistry.PullManifest(标记,acceptMediaTypes)
如果错误!=零{
t、 logger.Errorf(“从源注册表%v中提取%s:%s的清单时出错”,
t、 repository.name、tag、err)
返回“”,无,错误

正如上面的代码,401 http代码似乎从未被考虑过,acceptMediaTypes是一些处理媒体类型的http头,而不是身份验证。那么harbor如何从本地提取图像呢


环境

linux:Red Hat Enterprise linux服务器7.5版(Maipo)

海港:v1.5.0

docker(客户端和服务器):17.12.1-ce


网络拓扑

nginx(https:443)->harbor(http:8082)

nginx和harbor都部署在同一KVM上

DNS中解析的“registry test.xx.com”


我更想知道有谁成功地使用了harbor的复制功能

有谁能帮我一把或给我一些建议吗?非常感谢~


更多细节:08-07

尝试从KVM本地获取一些wireshark信息

tcpdump -i any port 8082

如图所示,“/service/token”请求已经发送,并且获得了正确的令牌,但是下面的清单请求没有包含Antenticate令牌,因此失败。因此我不知道令牌缓存发生了什么


也许我需要阅读Lucky的更多代码细节来解决这个问题

事实上,关键错误在于网络拓扑:

nginx(https:80)->nginx(https:443)->harbor(http:8082)

“nginx(https:80)->nginx(https:443)”只是通过301重定向处理从harbor组件到self registry的请求,因为harbor是通过http模式部署的,来自harbor本身的请求也是http

这带来了灾难,因为30X redirect无法获取cookies和身份验证等感知头。因此请求重定向到https,实际上从未将任何身份验证令牌带到港口,因此在拉取图像时引发401错误


根据我的选择,解决此问题的方法只是更改网络拓扑:

nginx(https:443)->harbor(https:8082)

这意味着必须通过https模式部署harbor


事实上,它现在真的很好用。

所以我不能只用http运行harbor?