Docker 401“;“需要认证”;港口复制
我已经使用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”,“操作”:“提取”}]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[警告]在目标注册表上创建
如上所述,未经授权的错误似乎是由于从本地拉取映像而发生的,而不是由于远程。事实上,远程注册表已通过[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?