AppServer/

建立自用的 Docker Hub 代理

发布
更新
字数
294
阅读
1 分钟

因为某些原因,最近使用默认地址从 Docker 拉取镜像的时候,会出现问题。因为有海外 vps,所以可以自建一个镜像用于 docker pull 镜像。主要使用 nginx 来做,实现很简单如下:

bash
cat /etc/nginx/sites-available/my-docker-hub.mydomain.com.conf
bash
server {
    listen 443 ssl;
    server_name my-docker-hub.mydomain.com;

    access_log /var/log/nginx/my-docker-hub.mydomain.com/access.log main;
    error_log /var/log/nginx/my-docker-hub.mydomain.com/error.log info;

    ssl_certificate /etc/nginx/cert/mydomain.com/fullchain.cer;
    ssl_certificate_key /etc/nginx/cert/mydomain.com/mydomain.key;

    location /v2/ {
        proxy_pass https://registry-1.docker.io;
        proxy_set_header Host registry-1.docker.io;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_buffering off;

        proxy_set_header Authorization $http_authorization;
        proxy_pass_header Authorization;

        proxy_hide_header www-authenticate;
        add_header www-authenticate 'Bearer realm="https://my-docker-hub.mydomain.com/token",service="registry.docker.io"' always;

        proxy_intercept_errors on;
        recursive_error_pages on;
        error_page 301 302 307 = @handle_redirect;

    }

    location /token {
        resolver 1.1.1.1 valid=600s;
        proxy_pass https://auth.docker.io;

        proxy_set_header Host auth.docker.io;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header Authorization $http_authorization;
        proxy_pass_header Authorization;

        proxy_buffering off;
    }

    location @handle_redirect {
        resolver 1.1.1.1;
        set $saved_redirect_location '$upstream_http_location';
        proxy_pass $saved_redirect_location;
    }

}

然后重新加载 nginx:

bash
service nginx reload

再来到 docker 服务器上,编辑 /etc/docker/daemon.json 如下:

bash
{
"registry-mirrors": [
    "https://my-docker-hub.mydomain.com"
]
}

然后重启 docker 服务:

bash
systemctl daemon-reload
systemctl restart docker

再 docker pull 一下,进度条终于可以动了。

上面部分内容是从其它地方看到的,但忘记记录原始出处了,如有侵权,请联系我。谢谢。

评论

正在载入评论…

留下评论

人机验证
四位数字,看不清可点击图片刷新

评论经审核后显示。

回到顶部 ↑