我将docker镜像推送到 Artifact [Artifactory Pro Power Pack 3.5.2.1(rev。30160)](用作docker注册表)时遇到问题。

我有docker版本:

$ sudo docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.3.3
Git commit (client): a8a31ef/1.5.0
OS/Arch (client): linux/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.3.3
Git commit (server): a8a31ef/1.5.0

我关注了这个链接http://www.jfrog.com/confluence/display/RTF/Docker+Repositories和这个artifactory as docker registry
我在 Artifact 中创建了一个名为docker-local的Docker注册表,并为其启用了Docker支持。
我的 Artifact 没有选项可以像this document一样说docker v1或v2,因此我假设它使用docker v1。

Artifactory为我生成了这些:
<distributionManagement>
    <repository>
        <id>sdpvvrwm812</id>
        <name>sdpvvrwm812-releases</name>
        <url>http://sdpvvrwm812.ib.tor.company.com:8081/artifactory/docker-local</url>
    </repository>
    <snapshotRepository>
        <id>sdpvvrwm812</id>
        <name>sdpvvrwm812-snapshots</name>
        <url>http://sdpvvrwm812.ib.tor.company.com:8081/artifactory/docker-local</url>
    </snapshotRepository>
</distributionManagement>

尽管某些设置不适用于这些设置。

我安装了反向代理nginx并将这些设置复制到其/etc/nginx/nginx.conf中:



我生成了ssl密钥,如http://www.akadia.com/services/ssh_test_certificate.html所示,并放置在2个目录中
/etc/ssl/certs/sdpvvrwm812.ib.tor.company.com.crt;
/etc/ssl/private/sdpvvrwm812.ib.tor.company.com.key;

我不确定如何ping新的Docker注册表,但是
 sudo docker login -u adrianus -p AT65UTJpXEFBHaXrzrdUdCS -e adrian@company.com http://sdpvvrwm812.ib.tor.company.com

给出此错误:



但是证书/etc/docker/certs.d/sdpvvrwm812.ib.tor.company.com/ca.crt存在,这是怎么回事?
sudo curl -k -uadrianus:AP2pKojAeMSpXEFBHaXrzrdUdCS "https://sdpvvrwm812.ib.tor.company.com"

给出此错误:
curl: (35) SSL connect error

我确实通过以下方式启动了Docker客户端:
sudo docker -d --insecure-registry https://sdpvvrwm812.ib.tor.company.com

可能是因为我的Docker注册表是http://sdpvvrwm812.ib.tor.company.com:8081/artifactory/docker-local并且docker和nginx正在寻找http://sdpvvrwm812.ib.tor.company.com:8081/artifactory/docker-local / v1 吗?

有什么线索如何使Docker将图像推送到 Artifact 上?

最佳答案

<distributionManagement/>部分用于Maven。 Artifactory 3显示了Docker仓库的Maven代码片段(在Artifactory 4中已修复,欢迎您升级),这有点面子。因此,请不要理会它。

通常,在Docker中,您不能使用/ artifactory / repoName。这是Docker的限制,您的注册表必须为 hostname:port ,没有任何其他路径。

这就是为什么您必须配置反向代理的原因。您在nginx配置中所做的就是将所有对sdpvvrwm812.ib.tor.company.com:443/v1的请求转发到http://sdpvvrwm812.ib.tor.company.com:8081/artifactory/api/docker/docker-local/v1,这是正确的做法。

请注意,证书的位置应为/etc/docker/certs.d/sdpvvrwm812.ib.tor.company.com/,而不是/etc/ssl/certs/

09-04 22:59
查看更多