【问题标题】:How to push docker images through reverse proxy to artifactory如何通过反向代理将docker镜像推送到artifactory
【发布时间】:2015-07-30 17:25:43
【问题描述】:

我在将 docker 映像推送到 artifactory [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 我在工件中创建了一个名为 docker-local 的 docker 注册表,并为它启用了 docker 支持。 我的工件没有一个选项,我可以像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中:

http {

##
# Basic Settings
##
[...]

server {
    listen 443;
    server_name sdpvvrwm812.ib.tor.company.com;

    ssl on;
    ssl_certificate /etc/ssl/certs/sdpvvrwm812.ib.tor.company.com.crt;
    ssl_certificate_key /etc/ssl/private/sdpvvrwm812.ib.tor.company.com.key;

    access_log /var/log/nginx/sdpvvrwm812.ib.tor.company.com.access.log;
    error_log /var/log/nginx/sdpvvrwm812.ib.tor.company.com.error.log;

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Original-URI $request_uri;
    proxy_read_timeout 900;

    client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads

    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
    chunked_transfer_encoding on;

    location /v1 {
        proxy_pass http://sdpvvrwm812.ib.tor.company.com:8081/artifactory/api/docker/docker-local/v1;
    }
} }

我生成了我的 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

给出这个错误:

FATA[0000] 来自守护程序的错误响应:v1 ping 尝试失败 错误:获取https://sdpvvrwm812.ib.tor.company.com/v1/_ping:拨打tcp 172.25.10.44:443:连接被拒绝。如果此私有注册表仅支持带有未知 CA 证书的 HTTP 或 HTTPS,请添加 --insecure-registry sdpvvrwm812.ib.tor.company.com 给守护进程 论据。在 HTTPS 的情况下,如果您有权访问注册表的 CA证书,不需要flag;只需放置 CA 证书 在 /etc/docker/certs.d/sdpvvrwm812.ib.tor.company.com/ca.crt

但是证书/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 将图像推送到工件?

【问题讨论】:

    标签: nginx docker continuous-integration artifactory


    【解决方案1】:

    &lt;distributionManagement/&gt; 部分用于 maven。 Artifactory 3 显示 maven sn-p for Docker repos 有点面子(在 Artifactory 4 中修复,欢迎升级),请忽略。

    通常对于 Docker,您不能使用 /artifactory/repoName。这是 Docker 的限制,你的注册表必须是 hostname:port,没有任何额外的路径。

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

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

    【讨论】:

    • 我发现其他博客给出了放置证书的不同位置。到目前为止,包括你的方法在内都没有奏效。我正在尝试购买证书而不是我生成它们,并将尝试这样做。如果这些证书有效,将接受此答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多