Search code examples
nginxdockerartifactory

Status 405 - docker - artifactory


I get the following error when pushing images to docker artifactory:
v1:

Error: Status 405 trying to push repository abc-docker-local: "{\n  \"errors\" : [ {\n    \"status\" : 405,\n    \"message\" : \"Method Not Allowed\"\n  } ]\n}"

I use nginx. My config file looks like:

server_name localserver;
rewrite ^  remoteserver/artifactory/api/docker/abc-docker-local/v1 redirect;
if ($http_x_forwarded_proto = '') {
    set $http_x_forwarded_proto  $scheme;
}

location / {
        proxy_read_timeout  900;
        proxy_pass_header   Server;
        proxy_cookie_path ~*^/.* /;
        proxy_pass          http://remoteserver:9081/artifactory/api/docker/abc-docker-local/v1;
        proxy_set_header   X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host;
        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;
}

In Artifactory I set the repo as v1. I also tested with v2 but no end points are returned. The exact error for v2 is:

Index response didn't contain any endpoints

thanks in advance


Solution

  • If the result is blank you must have not inserted all of the required configuration - here's an example from my sandbox: reverse proxy config

    At any rate, this is the config that Artifactory generated which I use which works for me with Docker 1.10 (but also worked with Docker 1.8 and 1.9) installed on a remote Ubuntu machine while my Artifactory sandbox is my machine.

    Note the certificates location I have which is not common (certs\myCert.cert) so change it to wherever your SSL certs are, and also that i'm using ports 4441 and 4442 for V1 and V2 respectively:

    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        ## add ssl entries when https has been set in config
        ssl_certificate      certs\myCert.cert;
        ssl_certificate_key  certs\myCert.cert;
        ssl_session_cache shared:SSL:1m;
        ssl_prefer_server_ciphers   on;
        ## server configuration
        server {
            listen 443 ssl;
            listen 9091 ;
    
            server_name localhost;
            if ($http_x_forwarded_proto = '') {
                set $http_x_forwarded_proto  $scheme;
            }
            ## Application specific logs
            ## access_log /var/log/nginx/localhost-access.log timing;
            ## error_log /var/log/nginx/localhost-error.log;
            rewrite ^/$ /artifactory/webapp/ redirect;
            rewrite ^/artifactory/?(/webapp)?$ /artifactory/webapp/ redirect;
            location /artifactory/ {
            proxy_read_timeout  900;
            proxy_pass_header   Server;
            proxy_cookie_path ~*^/.* /;
            proxy_pass         http://localhost:8080/artifactory/;
            proxy_set_header   X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host:$server_port/artifactory;
            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;
            }
        }
    
        ## server configuration
        server {
            listen 4441 ssl;
    
    
            server_name localhost;
            if ($http_x_forwarded_proto = '') {
                set $http_x_forwarded_proto  $scheme;
            }
            ## Application specific logs
            ## access_log /var/log/nginx/localhost-access.log timing;
            ## error_log /var/log/nginx/localhost-error.log;
            rewrite ^/(v1|v2)/(.*) /artifactory/api/docker/docker-local-v1/$1/$2;
            client_max_body_size 0;
            chunked_transfer_encoding on;
            location /artifactory/ {
            proxy_read_timeout  900;
            proxy_pass_header   Server;
            proxy_cookie_path ~*^/.* /;
            proxy_pass         http://localhost:8080/artifactory/;
            proxy_set_header   X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host:$server_port/artifactory;
            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;
            }
        }
    
        ## server configuration
        server {
            listen 4442 ssl;
    
    
            server_name localhost;
            if ($http_x_forwarded_proto = '') {
                set $http_x_forwarded_proto  $scheme;
            }
            ## Application specific logs
            ## access_log /var/log/nginx/localhost-access.log timing;
            ## error_log /var/log/nginx/localhost-error.log;
            rewrite ^/(v1|v2)/(.*) /artifactory/api/docker/docker-local-v2/$1/$2;
            client_max_body_size 0;
            chunked_transfer_encoding on;
            location /artifactory/ {
            proxy_read_timeout  900;
            proxy_pass_header   Server;
            proxy_cookie_path ~*^/.* /;
            proxy_pass         http://localhost:8080/artifactory/;
            proxy_set_header   X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host:$server_port/artifactory;
            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;
            }
        }
    }