【问题标题】:Configuring docker virtual repository in artifactory在工件中配置 docker 虚拟存储库
【发布时间】:2016-05-17 17:44:11
【问题描述】:

我有一个本地 docker 存储库和一个远程 docker 存储库,我创建了一个结合两者的虚拟 docker 存储库。为了从客户端访问此存储库,是否也需要将其添加到反向代理中?

这是当前的反向代理配置

 upstream artifactory_lb {

        server myserver.mycompany.com:8081 backup;
        server myserver.mycompany.com:8081;
}


log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name  to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';
ssl_certificate  /etc/nginx/ssl/multidomain_cert_files/mycert.pem;
ssl_certificate_key /etc/nginx/ssl/multidomain_cert_files/mykey.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4';
ssl_session_cache shared:SSL:10m;

server {
        listen 80;
        listen 443  ssl;
        client_max_body_size 2048M;
        location / {
                proxy_set_header Host $host;
                proxy_pass http://artifactory_lb;
                proxy_read_timeout 90;
        }
        access_log /var/log/nginx/access.log upstreamlog;
        location /basic_status {
                stub_status on;
                allow all;
                }
}

# Server configuration

server {
    listen 2222 ssl;

    if ($http_x_forwarded_proto = '') {
        set $http_x_forwarded_proto  $scheme;
    }

    rewrite ^/(v1|v2)/(.*) /api/docker/myrepo_images/$1/$2;
    client_max_body_size 0;
    chunked_transfer_encoding on;

    location / {
    allow all;s
    proxy_read_timeout  900;
    proxy_pass_header   Server;
    proxy_cookie_path ~*^/.* /;
    proxy_set_header   X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
    proxy_set_header    X-Forwarded-Port  $server_port;
    proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
    proxy_set_header    Host              $http_host;
    proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_pass http://artifactory_lb/artifactory/;

    }
}

【问题讨论】:

    标签: nginx docker virtual artifactory


    【解决方案1】:

    是的。 Docker 注册表仅由其主机名引用。这意味着您需要在反向代理中使用两个具有不同主机名的虚拟主机(使用 server_name directive),映射到不同的 Artifactory 存储库。

    以下示例配置(缩短)应该可以解决问题:

    server {
        listen 2222 ssl;
        server_name local-repo.my-artifactory.com;
    
        rewrite ^/(v1|v2)/(.*) /api/docker/myrepo_images/$1/$2;
    
        # <insert remaining configuration directives here>
    }
    
    server {
        listen 2222 ssl;
        server_name virtual-repo.my-artifactory.com;
    
        rewrite ^/(v1|v2)/(.*) /api/docker/myrepo_virtual/$1/$2;
    
        # <insert remaining configuration directives here>
    }
    

    现在您应该可以使用常规 docker 命令访问两个注册表:

    $ docker pull virtual-repo.my-artifactory.com:2222/foo/bar:latest
    $ docker pull local-repo.my-artifactory.com:2222/foo/bar:latest
    $ docker push local-repo.my-artifactory.com:2222/foo/bar:latest
    

    【讨论】:

    • 感谢 helmbert,为了缓解客户端的变化,能否将两个存储库配置为相同的服务器名称但在不同的端口上?
    • @user_mda,当然;只需将虚拟主机中的listen 指令调整为您喜欢的任何端口即可。
    • @user_mda 你应该学会接受好的答案——比如这个。您只接受了一个对您所有问题的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多